2016-09-27 35 views
0

我有一個Django表單字段,一段時間,我通過使用time.strfrtime()函數將初始值設置爲當前時間。Django表單字段初始strfrtime值不更新

使用這種方法,當我第一次加載Django應用程序(通過執行python manage.py runserver)時,該字段最初正確填充當前時間。但是,隨後如果我重新加載頁面,則表單字段無法更新當前時間,而是反覆將應用程序隨時分發回來。但是,如果我修改了一個Django文件,比如forms.py或views.py,那麼當前時間會正確刷新。

在forms.py:

class EventForm(ModelForm): 

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

在views.py:

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