5

モデルの追加/変更ページで自動 DateTimeField の手動編集を許可することは可能ですか? フィールドは次のように定義されています。

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

これらを手動でオーバーライドする方法が正確に機能するかどうかはわかりません.自動更新はデータベースレベルまたはdjango自体で処理されますか?

4

2 に答える 2

4

auto_now_add=Trueauto_now=True 仮定し editable=Falseます。したがって、このフィールドを修正する必要がある場合は、使用しないでください。

django レベルでハンドルを自動更新します。たとえば、クエリセットを更新すると、たとえば

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

post_updatedフィールドを更新しません。しかし

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

しましょう

于 2012-04-21T16:28:21.243 に答える
1

auto_now_add=Trueauto_now=True仮定しeditable=Falseます。そのため、管理者または他の でこのフィールドを変更する必要がある場合は、設定ModelFormを使用しないでください。auto_now_*=True

これらのフィールドの自動更新はauto_now_*、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

Django でこの自動動作をオーバーライドしたい場合は、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
于 2014-03-24T21:56:50.953 に答える