Django固定装置和auto_now_add日期时间字段

时间:2019-06-11 14:34:07

标签: django

尝试为具有auto_now_add日期时间字段的模型创建夹具

created_at = models.DateTimeField(auto_now_add=True)

在加载灯具后,会抛出IntegrityError: Problem installing fixture, null value in column "created_at" violates not-null constraint

错误

是否可以让Django确定日期而不是手动输入日期?

[
  {
    "model": "customer.type",
    "pk": 1,
    "fields": {
      "name": "type",
      "created_by": 1
    }
  }
]

1 个答案:

答案 0 :(得分:0)

简单的解决方法 之一将同时使用default--[DjangoDoc]editable--[DjangoDoc]参数,

from django.utils import timezone


class Foo(models.Model):
    ...
    created_at = models.DateTimeField(default=timezone.now, editable=False)

上述解决方案在 Django 2.1 Python 3.6 环境下进行了测试和验证。


此方法的缺点

Django-Doc of DateField.auto_now_add

  

首次创建对象时,将字段自动设置为现在。对于创建时间戳很有用。请注意,始终使用当前日期。 不仅是您可以覆盖的默认值。因此,即使您在创建对象时为此字段设置了一个值,也会将其忽略。如果您希望能够修改此字段,请设置以下内容,而不是auto_now_add=True

这意味着,如果您手动提供任何有效的日期时间,则此设置将覆盖timezone.now()值。