Django是否保证为auto_now和auto_now_add生成相同的时间戳?
假设我有一个Django模型,其中包含以下字段:Django是否保证为auto_now和auto_now_add生成相同的时间戳?,django,datetime,model,Django,Datetime,Model,假设我有一个Django模型,其中包含以下字段: class Gizmo(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_updated = models.DateTimeField(auto_now=True) 当我创建gizmo时,我是否可以确保Django将为这两个字段生成相同的时间戳?我担心Django可能会为每个实例创建一个datetime实例,并且这些实例会产生稍微
class Gizmo(models.Model):
date_created = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
当我创建gizmo时,我是否可以确保Django将为这两个字段生成相同的时间戳?我担心Django可能会为每个实例创建一个datetime实例,并且这些实例会产生稍微不同的时间戳。时间戳必须相同,以便有可靠的方法确定gizmo是否已更新(即,时间戳是否不同)。基于一项测试,我可以告诉您答案是否
test = TestModel.objects.create()
print test.date_created
# Out: datetime.datetime(2011, 12, 12, 20, 51, 41, 620985)
print test.date_last_modified
# Out: datetime.datetime(2011, 12, 12, 20, 51, 41, 621008)
我只需要重写模型上的save方法,然后自己填充这些值
PS:我只是先看了一下字段代码,但最后只是运行了实际的测试,因为如果有两个自动类型的字段或其他什么的话,我不知道django是否在模型级别上做了一些事情
# datetimefield
def pre_save(self, model_instance, add):
if self.auto_now or (self.auto_now_add and add):
value = datetime.datetime.now()
setattr(model_instance, self.attname, value)
return value
else:
return super(DateTimeField, self).pre_save(model_instance, add)
当您在./manage.py shell中的一个循环中尝试它时,它做了什么?请注意,我们正在努力解决这个问题。