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

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

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

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

Ответ 1

Вот почему вы должны всегда импортировать базовый модуль datetime: import datetime, а не класс datetime в этом модуле: from datetime import datetime.

Другая ошибка, которую вы сделали, - это фактически вызвать функцию по умолчанию, используя (). Это означает, что все модели получат дату во время определения класса, поэтому, если ваш сервер будет оставаться в течение нескольких дней или недель без перезапуска Apache, все элементы получат такую ​​же начальную дату.

Итак, поле должно быть:

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

Вы также можете использовать lambda. Полезно, если вы используете django.utils.timezone.now

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

Ответ 6

Я думаю, что лучший способ решить эту проблему - использовать функцию datetime:

from datetime import datetime

date = models.DateField(default=datetime.now)

Благодарим Джанго Мусингса. Я использовал это и работает отлично.