是否可以在模型的添加/更改页面上手动编辑自动DateTimeField。这些字段定义为:
post_date = models.DateTimeField(auto_now_add=True)
post_updated = models.DateTimeField(auto_now=True)
我不确定如何在数据库级别或django本身处理自动更新时手动覆盖这些是否正常工作?
答案 0 :(得分:2)
auto_now_add=True
和auto_now=True
assume editable=False
。因此,如果您需要更正此字段,请不要使用它们。
自动更新django级别的句柄。例如,如果更新查询集,例如
Article.object.filter(pk=10).update(active=True)
不会更新post_updated
字段。但是
article = Article.object.get(pk=10)
article.active = True
atricle.save()
会做
答案 1 :(得分:0)
auto_now_add=True
和auto_now=True
假设editable=False
。因此,如果您需要在管理员或任何其他ModelForm
中修改此字段,请不要使用auto_now_*=True
设置。
在Django级别处理这些auto_now_*
字段的自动更新。
如果您使用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