Параметры по умолчанию для поля даты Django
У меня есть модель, которая имеет поле даты время:
date = models.DateField(_("Date"), default=datetime.now())когда я проверяю приложение во встроенном администраторе django, поле даты также имеет время, добавленное к нему, так что при попытке сохранить его он возвращает ошибку. Как сделать по умолчанию только дату? (значение datetime.сегодня() тоже не работает)
5 ответов:
вот почему вы должны всегда импортируйте базу
datetimeмодуль:import datetime, а неdatetimeкласс в этом модуле:from datetime import datetime.другая ошибка, которую вы сделали, заключается в том, чтобы фактически вызвать функцию по умолчанию, с
(). Это означает, что все модели получат дату в момент первого определения класса - так что если ваш сервер остается в течение нескольких дней или недель без перезагрузки Apache, все элементы получат то же самое начальное дата.поэтому поле должно быть:
import datetime date = models.DateField(_("Date"), default=datetime.date.today)
вы ошибаетесь, используя модуль datetime вместо модуля даты. Вы хотели сделать это:
from datetime import date date = models.DateField(_("Date"), default=date.today)Если вы хотите только захватить текущую дату, правильный способ справиться с этим-использовать параметр auto_now_add:
date = models.DateField(_("Date"), auto_now_add=True)однако modelfield docs четко заявить, что auto_now_add и auto_now будет всегда используйте текущую дату и не являются значением по умолчанию, которое можно переопределить.
вы также можете использовать
lambda. Полезно, если вы используете Джанго.utils.часовой пояс.сейчасdate = models.DateField(_("Date"), default=lambda: now().date())
Comments