Django的DateTimeField的“auto_now”似乎不起作用

时间:2015-06-06 11:26:25

标签: django django-models

我有一个Comment模型。它有以下时间戳字段:

created = models.DateTimeField(auto_now_add=True, blank=True, null=True)
last_edit = models.DateTimeField(auto_now=True, blank=True, null=True)

现在,当我使用以下格式更新评论:Comment.objects.filter(...).update(text="some new text")时,last_edit字段在评论文本更新时不会更新。有什么问题?

更新:此外,我使用filter因为update无法与get一起使用,即Comment.objects.get(...).update(...)无效。我真正想做的是get,因为我确信一次只能更新一条评论。

1 个答案:

答案 0 :(得分:2)

因为你正在使用update,它直接在数据库中进行更新,而auto_now是在Python中完成的。这可行:

for commment in Comment.objects.filter(...):
    comment.text="some new text"
    comment.save()

显然,这比在db中一次性执行效率低。如果您确实需要,那么您还必须在更新中设置日期:

Comment.objects.filter(...).update(text="some new text", last_edit=datetime.datetime.now())