Django是否保证为auto_now和auto_now_add生成相同的时间戳?

时间:2011-12-13 02:15:40

标签: 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可能会为每个实例创建一个日期时间实例,并且这些实例会产生稍微不同的时间戳。重要的是时间戳必须相同,以便有一种可靠的方法来确定Gizmo是否已更新(即时间戳是否不同)。

1 个答案:

答案 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)