#django #python-2.7 #datetime #django-models #django-views
#django #python-2.7 #datetime #django-модели #django-просмотры
Вопрос:
Моя форма выглядит следующим образом:
Если флажок «Выполняется» установлен, я хочу, чтобы «Дата окончания» была нулевой в базе данных MySQL при сохранении формы.
В моей модели у меня есть это, чтобы разрешить сохранение значения null (я думаю?):
end_date = models.DateField(default=datetime.date, blank=True, null=True)
Я не знаю, лучший ли это способ сделать это, но тогда в моем views.py У меня есть эта строка:
if request.POST.get('end_year') == '- Year -':
end_date = datetime.date(None, None, None)
(У меня также были бы аналогичные проверки для месяца и дня)
Но когда я пытаюсь отправить свою форму, я получаю исключение «требуется целое число».
В качестве некоторой дополнительной информации, когда я вручную пытаюсь изменить end_date на null в базе данных, я получаю эту ошибку: Incorrect date value: 'null' for column 'end_date' at row 1
Я не совсем уверен, какой наилучший способ подойти к этому. Любые идеи будут оценены. Спасибо.
Комментарии:
1. В python этого нет,
null
поэтому он не знает, что он должен сопоставлять это сNone
, которое, как известно, django ORM обрабатывает как db null при генерации sql. Попробуйте отправить пустое значение из вашего html / js.2. Откуда вы получаете эту ошибку? Опубликуйте всю ошибку с обратным отслеживанием, пожалуйста.
Ответ №1:
Мне кажется, что если вы удалите значение default
из своего end_date
поля, все будет в порядке.
end_date = models.DateField(blank=True, null=True)
И теперь, если это выполняется в вашей форме, тогда просто не предоставляйте никаких данных в end_date
поле. Я хочу сказать, что вы не должны этого делать.
end_date = datetime.date(None, None, None)
Но поскольку для этого поля нет режима default
, когда оно не выполняется, просто предоставьте ему исходные данные из представления или формы.
Ответ №2:
Я думаю, вам следует проверить следующее:
-
end_date = models.DateTimeField(blank=True,null=True)
-
при обновлении поля end_date как NULL просто запрашивайте like
end_date = None
вместо того, чтобы делатьend_date = datetime.date(None, None, None)
.