2016-09-27 21 views
0

私はDjangoフォームフィールドを持っています。ここでは、time.strfrtime()関数を使用して現在の時刻に初期値を設定します。Djangoフォームフィールドの初期strfrtime値が更新されない

このメソッドを使用すると、最初にDjangoアプリケーションを読み込んだとき(python manage.py runserverを実行して)、フィールドには現在の時刻が正しく設定されます。しかし、その後、ページをリロードすると、フォームフィールドは現在の時刻を更新することができず、代わりにアプリが最初に開始された時刻を繰り返し返すことになります。しかし、私がDjangoファイル(form.pyやviews.pyなど)を変更した場合、現在の時刻が正しく更新されます。 forms.pyで

:views.pyで

class EventForm(ModelForm): 

     end_time = forms.TimeField(label="Current time", initial=strftime("%I:%M %p")) 

def index(request): 

    event_form = EventForm() 

にはどうすればEND_TIMEフィールドの初期値は、常に現在の時刻に更新するのですか?

注:私のような、私は私のevent_form = EventForm()コードに初期データを渡すことによってこの問題を解決することができ承知している。

event_form = EventForm(initial={'end_time':strftime("%I:%M %p")}) 

しかし、より良い方法はありますか?現在の時間が自動的に更新されない場面の背後には何が起こっていますか?

答えて

1

クラスのメソッド__init__()に設定する必要があります。

from time import strftime 
from django import forms 


class EventForm(forms.Form): 
    end_time = forms.TimeField(label='Current time') 

    def __init__(self, *args, **kwargs): 
     kwargs.update(initial={ 
      'end_time': strftime('%I:%M %p') 
     }) 

     super(EventForm, self).__init__(*args, **kwargs) 
+0

ありがとうございました!これはうまくいった。私が元々持っていたようにフィールド定義/属性に設定できない理由は分かっていますか? – intersection

+0

私は、クラス変数がこのクラスのインスタンスを最初に作成したときにのみインスタンス化されるため、かなり確信しています。したがって、必要なものを変更するために初期化メソッドをオーバーロードする能力があります。 –

+0

ありがとう! – intersection

関連する問題