对于Django中的模型,auto_now_add
和timezone.now
(作为默认值)之间有什么区别?
示例:
create_date = models.DateTimeField(auto_now_add=True)
和
create_date = models.DateTimeField(default=timezone.now)
?
UPD。我说的是总是不覆盖默认值的情况。
答案 0 :(得分:1)
default
提供了保存实例时的默认值,但没有该字段的值,但仍暗示该字段是用户可编辑的,因此有人可以为该字段输入值。
auto_now
和auto_now_add
表示该字段不可用户编辑,必须始终设置为该值。
有人发布了此on reddit。
答案 1 :(得分:0)
貌似Django在timezone.now()
上执行了相同的pre_save
under the hood:
def pre_save(self, model_instance, add):
if self.auto_now or (self.auto_now_add and add):
value = timezone.now()
setattr(model_instance, self.attname, value)
return value
else:
return super(DateTimeField, self).pre_save(model_instance, add)
唯一的区别是python调用timezone.now()
的时刻,但这应该是纳秒级的差异。
答案 2 :(得分:0)