我从Internet上了解到的是Django模型教程
我的问题是,如果模型中的文件包含同时设置为True的auto_now和auto_now_add怎么办?在这种情况下会发生什么?
答案 0 :(得分:3)
auto_now
优先(显然,因为它每次都会更新字段,而auto_now_add
仅在创建时更新)。这是DateField.pre_save
方法的代码:
def pre_save(self, model_instance, add):
if self.auto_now or (self.auto_now_add and add):
value = datetime.date.today()
setattr(model_instance, self.attname, value)
return value
else:
return super().pre_save(model_instance, add)
如您所见,如果设置了auto_now
或同时设置了两个auto_now_add
并且对象是新的,则该字段将接收到当前日期。
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().pre_save(model_instance, add)
答案 1 :(得分:3)
这些字段内置于 Django 中是为了明确这个目的——每次保存对象时,auto_now 字段都会更新为当前时间戳,因此非常适合跟踪对象上次修改时间,而 auto_now_add 字段保存为当前时间戳一行第一次添加到数据库时的时间戳,因此非常适合跟踪它的创建时间。
答案 2 :(得分:2)
根据django documentation使用auto_now
和auto_now_add
作为True
会导致错误,因为它们都是互斥的。
答案 3 :(得分:0)
如Django官方文档所述-
auto_now
,auto_now_add
和default
是互斥的,如果一起使用会导致错误