Django: возникли проблемы с сохранением значения datetime.дата как null в базе данных

#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:

Я думаю, вам следует проверить следующее:

  1. end_date = models.DateTimeField(blank=True,null=True)

  2. при обновлении поля end_date как NULL просто запрашивайте like end_date = None вместо того, чтобы делать end_date = datetime.date(None, None, None) .