Как добавить новое поле типа DateTimeField в Django |
Ситуация: нужно добавить в модель Django два новых поля с датой и временем - created и last_modified. При чём дата создания (created) должна быть заполнена обязательно по логике здравого смысла, а дату модификации мы хотим изначально оставить пустой, чтобы, например, для новых страниц (записей, заметок, комментариев, чего угодно) выводилось примерно следующее:
Создано: 10.05.2021 в 13:40:28
Отредактировано: Никогда
Есть две проблемы. Первая. У нас на сайте уже есть страницы, при добавлении поля created оно окажется изначально пустым и мы получим ошибку. То есть старым записям нужно назначить некоторую дату. Единственный вариант, который я нашёл, сделать такое поле:
created = models.DateTimeField('Date of creation', default=timezone.now)
default=timezone.now
обязательно без скобок. Если указать default=timezone.now()
, полю будет назначена дата запуска сервера, и у всех новых страниц дата создания (как и время) будут одинаковыми. Если скобки не указать, метод будет вызываться при записи каждой новой строки в таблицу БД и вычислять текущее время.
А вот с полем last_modified другая проблема. Дата в него изначально не записывается, и мы получим ту же ошибку:
django.db.utils.IntegrityError: column "last_modified" contains null values
Есть два простых выхода:
last_modified = models.DateTimeField('Last modified', default=None, null=True, blank=True)
База данных позволит хранить пустые значения. Возможно, этот код будет работать без null=True
, я не пробовал. Но без blank=True
точно будут проблемы.
Второй выход - всё же назначить дату по умолчанию как timezone.now, а при выводе на страницу проверять: если дата модификации совпадает с датой создания, выводить Отредактировано: Никогда.
P.S. подозреваю, что default=None
во втором примере кода тоже ненужен)).
Комментировать | « Пред. запись — К дневнику — След. запись » | Страницы: [1] [Новые] |