2012-04-21 25 views
3

モデルの追加/変更ページで自動DateTimeFieldを手動で編集できるようにすることは可能ですか?フィールドは次のように定義されています。私はこれらをオーバーライドすることは、正確にどのように動作するか、手動でわからないDjango admin - 自動DateTimeフィールドの手動編集を許可する

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

、データベースレベルまたはジャンゴ自体に扱わ自動更新のですか?

+0

自動更新はDjangoのレベルで 'DateTimeField'の' pre_save'方法で処理されます。 – okm

+0

すべて可能ですが、それらのフィールドがどのように振る舞いたいかを教えてください。 '' post_date''フィールドに '' default = datetime.datetime.now''を使い、** Form **に '' post_updated''フィールドの初期値を微調整する方が良いでしょう。 – seler

答えて

2

auto_now_add=Trueおよびauto_now=Trueassumeeditable=False。したがって、このフィールドを修正する必要がある場合は、使用しないでください。

djangoレベルでの自動更新処理。たとえば、クエリーセットを更新するとします。

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の設定を使用しないでください。

これらのフィールドの自動更新は、Djangoレベルで処理されます。

あなたはauto_now_*=Trueフィールドとモデルのインスタンスを更新した場合、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 
関連する問題