Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django是否保证为auto_now和auto_now_add生成相同的时间戳?_Django_Datetime_Model - Fatal编程技术网

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

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实例,并且这些实例会产生稍微

假设我有一个Django模型,其中包含以下字段:

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中的一个循环中尝试它时,它做了什么?请注意,我们正在努力解决这个问题。