Suk*_*mar 8 python django django-templates django-models django-forms
我在Django
模型字段的属性中了解的是
auto_now
-每次调用Model.save()时,将字段的值更新为当前时间和日期。auto_now_add
-用创建记录的时间和日期更新值。我的问题是,如果模型中的文件同时包含auto_now
和auto_now_add
设置为True,该怎么办?在这种情况下会发生什么?
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)
Run Code Online (Sandbox Code Playgroud)
如您所见,如果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)
Run Code Online (Sandbox Code Playgroud)
这些字段内置于 Django 中是为了明确这个目的——每次保存对象时,auto_now 字段都会更新为当前时间戳,因此非常适合跟踪对象上次修改的时间,而 auto_now_add 字段被保存为当前时间戳行首先添加到数据库中,因此非常适合在创建时进行跟踪。