假设我有一个包含以下字段的Django模型:
class Gizmo(models.Model):
date_created = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
当我创建一个Gizmo时,我能确定Django会为这两个字段生成相同的时间戳吗?我担心Django可能会为每个实例创建一个日期时间实例,并且这些实例会产生稍微不同的时间戳。重要的是时间戳必须相同,以便有一种可靠的方法来确定Gizmo是否已更新(即时间戳是否不同)。
答案 0 :(得分:3)
基于一个测试,我可以告诉你答案是否定的。
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:我只是先查看字段代码,但最后只是运行实际测试,因为如果有两个auto_now类型的字段或其他什么,我不知道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)