auto_now_add和timezone.now之间的差异作为默认值

时间:2019-11-27 16:32:55

标签: python django django-models django-database

对于Django中的模型,auto_now_addtimezone.now(作为默认值)之间有什么区别? 示例:

create_date = models.DateTimeField(auto_now_add=True)

create_date = models.DateTimeField(default=timezone.now)

UPD。我说的是总是不覆盖默认值的情况。

3 个答案:

答案 0 :(得分:1)

default提供了保存实例时的默认值,但没有该字段的值,但仍暗示该字段是用户可编辑的,因此有人可以为该字段输入值。

auto_nowauto_now_add表示该字段不可用户编辑,必须始终设置为该值。

有人发布了此on reddit

答案 1 :(得分:0)

貌似Django在timezone.now()上执行了相同的pre_save under the hood

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(DateTimeField, self).pre_save(model_instance, add)

唯一的区别是python调用timezone.now()的时刻,但这应该是纳秒级的差异。

答案 2 :(得分:0)

说明:

auto_now_add = True 将在保存模型上创建日期

default = timezone.now 将是带时区的默认日期,并且您必须输入带时区的日期

说明链接:DateModel