Параметры по умолчанию для поля даты Django



У меня есть модель, которая имеет поле даты время:



date = models.DateField(_("Date"), default=datetime.now())


когда я проверяю приложение во встроенном администраторе django, поле даты также имеет время, добавленное к нему, так что при попытке сохранить его он возвращает ошибку. Как сделать по умолчанию только дату? (значение datetime.сегодня() тоже не работает)

1571   5  

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 будет всегда используйте текущую дату и не являются значением по умолчанию, которое можно переопределить.

date = models.DateTimeField(default=datetime.now, blank=True)

Это должно сделать трюк:

models.DateTimeField(_("Date"), auto_now_add = True)

вы также можете использовать lambda. Полезно, если вы используете Джанго.utils.часовой пояс.сейчас

date = models.DateField(_("Date"), default=lambda: now().date())

Comments

    Ничего не найдено.