Django admin - 允许手动编辑自动DateTime字段

时间:2012-04-21 16:18:20

标签: django django-admin

是否可以在模型的添加/更改页面上手动编辑自动DateTimeField。这些字段定义为:

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

我不确定如何在数据库级别或django本身处理自动更新时手动覆盖这些是否正常工作?

2 个答案:

答案 0 :(得分:2)

auto_now_add=Trueauto_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=Trueauto_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