2012-04-21 50 views
3

是否可以在模型的添加/更改頁面上手動編輯自動日期時間字段。該字段定義爲:Django admin - 允許手動編輯自動日期時間字段

post_date = models.DateTimeField(auto_now_add=True) 
post_updated = models.DateTimeField(auto_now=True) 

我不知道如何手動中重寫這些將工作完全是在數據庫級別或在Django本身處理的自動更新?

+0

自動更新在Django級別的'DateTimeField'的'pre_save'方法中處理。 – okm 2012-04-21 16:30:41

+0

一切皆有可能,但如果您能告訴我們您希望這些字段的行爲如何,它可能會更容易。我認爲''post_date''字段使用'default = datetime.datetime.now'會更好,並且可以在** Form **中調整post_updated字段的初始值。 – seler 2012-04-21 18:45:54

回答

2

auto_now_add=Trueauto_now=Trueassumeeditable=False。所以如果你需要糾正這個領域,不要使用它們。

在django級別自動更新句柄。例如,如果你更新了queryset,例如

Article.object.filter(pk=10).update(active=True) 

不會更新post_updated字段。但

article = Article.object.get(pk=10) 
article.active = True 
atricle.save() 

會做

0

auto_now_add=Trueauto_now=True承擔editable=False。因此,如果您需要在管理員或其他任何ModelForm中修改此字段,請不要使用auto_now_*=True設置。

自動更新這些auto_now_*字段在Django級別處理。

如果更新與auto_now_*=True領域模型的實例,那麼Django會自動如果要覆蓋在Django這個自動行爲更新的領域,例如,

class Article(models.Model): 
    active = models.BooleanField() 
    updated = models.DateTimeField(auto_now=True) 
article = Article.object.get(pk=10) 
article.active = True 
article.save() 
# ASSERT: article.updated has been automatically updated with the current date and time 

,你可以這樣做的通過queryset.update()更新實例,例如:

Article.object.filter(pk=10).update(active=True) 
# ASSERT: Article.object.get(pk=10).updated is unchanged 

import datetime 
Article.object.filter(pk=10).update(updated=datetime.datetime(year=2014, month=3, day=21)) 
# ASSERT: article.updated == March 21, 2014 
相關問題