質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.77%

DangoのDatetimeFieldにHTML5のDatetime-localを指定すると、初期値Valueで指定した値の表示ができない

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 689

ba-cahn

score 10

前提・実現したいこと

Django2.0にてDatetimeFiledで定義したModelに対し、
Formにてwigeht:attrsにてinput_type=datetime-localを指定しております。
画面の動作はdatetime-localの通り、日付のカレンダー、時計の選択が表示されますが、
表示時にシステム日付を表示したいのですが、空の状態(年/月/日 --:--)で表示されてしまいます。
手入力し、データの登録は可能です。

該当のソースコード

#model.py

class TimerTrn(TimeStampedModel):

    class Meta:
        ordering = ['-target_time']
    target_time = models.DateTimeField(verbose_name='設定時刻', default=timezone.now)
#form.py
class TimerForm(forms.ModelForm):
                                )
    target_time = forms.DateTimeField(
        label='設定時間',
        input_formats=['%Y-%m-%dT%H:%M'], 
        widget=forms.DateTimeInput(attrs={
            'type': 'datetime-local', 
            'emptyTips': 'タイマーの設定時間を入力',
        })
    )
#view.py


# 一覧画面
class IndexView(View):
    def get(self, request, *args, **kwargs):
        # タスクデータ読み込み
        timers = TimerTrn.objects.order_by('-target_time')
        context = {
            'timers': timers,
        }
        return render(request, 'offon/index.html', context)

index = IndexView.as_view()


# 追加
class TimerCreateView(CreateView):
    model = TimerTrn
    form_class = TimerForm
    template_name = "offon/timer_edit.html"
    success_url = '/' # 成功時にリダイレクトするURL


    def form_valid(self, form):
        # ロギング
        logger.debug("Timer insert.")
        trntimer = form.save()
        trntimer.save()
        messages.success(
            self.request, '「{}」を更新しました'.format(form.instance))
        # メイン画面にリダイレクト
        return redirect(reverse('offon:index'))

create = TimerCreateView.as_view()


# 更新
class TimerUpdateView(UpdateView):
    model = TimerTrn
    form_class = TimerForm
    template_name = 'offon/timer_edit.html'
    pk_url_kwarg = 'pk'
    context_object_name = 'form'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs) # はじめに継承元のメソッドを呼び出す
        context["title"] = "タイマー変更"
        return context

    def form_valid(self, form):
        trntimer = form.save()
        trntimer.save()
        messages.success(
            self.request, '「{}」を更新しました'.format(form.instance))
        # メイン画面にリダイレクト
        return redirect(reverse('offon:index'))
update = TimerUpdateView.as_view()
#timer_edit.html
{% load static %}
{% load humanize %}

{% block page_title %}{{ title }}{% endblock %}

{% block content %}
<div class="card-header">
    <h3 class="card-title">{{ title }}</h3>
</div>
<form action="" method="post" class="ui form">    
    <div class="ui stacked segment">
        {% csrf_token %}

        <label>{{ form.target_time.label }} </label><br>{{ form.target_time }}
        {{ form.errors.target_time }}

        <label>{{ form.switch_dt.label }}</label><br>
        <div class="btn-group-toggle" data-toggle="buttons">
        {% for choice in form.switch_dt %}
                <label for="{{ choice.id_for_label }}" class="btn btn-outline-secondary">{{ choice.choice_label }}{{ choice.tag }}</label>
        {% endfor %}
        {{ form.errors.switch_dt }}
        </div>
    </div>
    <button type="submit" class="btn btn-primary">更新</button>
</form>
{% endblock %}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る