Светильники Django и поле даты и времени auto_now_add - PullRequest
1 голос
/ 11 июня 2019

Попытка создать прибор для модели с 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 голосов
/ 11 июня 2019

Один из простых способов будет использовать default - [DjangoDoc] и editable - [DjangoDoc] аргументы вместе,

<b>from django.utils import timezone</b>


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

Вышеуказанное решение протестировано и проверено в среде Django 2.1 и Python 3.6 .


Недостаток этого метода

Из Джанго-Док DateField.auto_now_add

Автоматически устанавливает поле в настоящее время при первом создании объекта. Полезно для создания меток времени. Обратите внимание, что текущая дата всегда используется; это не просто значение по умолчанию, которое вы можете переопределить. Поэтому, даже если вы установите значение для этого поля при создании объекта, оно будет проигнорировано. Если вы хотите изменить это поле, установите вместо auto_now_add=True

следующее

Это означает, что этот параметр переопределит значение timezone.now(), если вы вручную введете любое действительное время / дату.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...