2017-03-17 84 views
0

我在Django窗體中的DateTimeField的初始值沒有問題。在窗體中的Django DateTimeField(初始值)

我在forms.py

class FaultForm(forms.ModelForm): 
    ... 
    date_time = forms.DateTimeField(initial=datetime.now().strftime("%Y-%m-%d %H:%M:%S"), required=False) 
    ... 

聲明我聲明在models.py

class Fault(models.Model): 
    ... 
    # date time 
    date_time = models.DateTimeField(default=datetime.now().strftime("%Y-%m-%d %H:%M:%S")) 
    ... 

問題是返回適當的時間。 當我用我的forms.py中的初始/默認日期時間向我的數據庫中添加一些對象時,我對每個對象都有完全相同的時間。

但是,當我從模板添加具有日期時間的對象時,我對數據庫中的每個對象都有很好的日期時間。

我必須告訴我的函數返回datetime是完全相同的情況,但也許問題是與生成的形式?我們有相同的時間,因爲我們生成一次形式,或者像這樣?

我不知道該怎麼做,因爲我想使用表單中的初始值,而不必在模板中再次執行。

Ony的想法??錯誤?其他日期時間函數?解決這個小問題的其他方法?

請幫我:)

回答

0

您調用的函數datetime.now().strftime("%Y-%m-%d %H:%M:%S")和分配default作爲。因此,在運行期間,now()將被評估並存儲爲默認值。因此,您可以在所有對象中看到相同的日期時間。您需要使用auto_now argument並將其設置爲True

型號 -

class Fault(models.Model): 
    ... 
    date_time = models.DateTimeField(auto_now=True) 
    ... 

表 -

class FaultForm(forms.ModelForm): 
    ... 
    date_time = forms.DateTimeField(initial=datetime.now(), required=False) 
    ... 
+0

我有這樣的錯誤: django.core.exceptions.FieldError:「DATE_TIME」不能對故障模型形式指定因爲它是不可編輯的字段 我嘗試禁用此字段,但它無法正常工作 –

+0

如果您希望字段是可編輯的,請刪除模型表單中的'auto_now = True'部分。 –

+0

所以你的答案是無用的。你告訴我,我需要使用auto_now參數來解決我的問題,但是當這個參數給我另一個問題時,你告訴我必須刪除auto_now?它怎麼能幫助我? –

0

的Django模型字段在編譯時得到評估。在上例中default的值得到一次

爲了解決這個問題簡單點default參數可以調用的:在該溶液中

def get_now(): 
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S") 

class Fault(models.Model): 
    date_time = models.DateTimeField(default=get_now) 
+0

雖然這可能會起作用,但應該更喜歡內置的auto_now。 –

+0

也許,但這取決於具體情況,並且在這個問題中沒有足夠的信息來可靠地表明這一點。 – brianz

+0

確切地說,由於沒有足夠的信息,人們應該總是喜歡內置的。 –