SelectDateWidget и неполное заполнение даты (например, выбран только месяц) - Python

Узнай цену своей работы

Формулировка задачи:

Django 1.11

Есть такой SelectDateWidget. Прикольный, конечно. Но я что-то не могу с ним справиться. Если в модели у поля поставить blank=True, то появляются "---" вместо месяца, дня и года, соответственно. Вот дока: https://docs.djangoproject.com/en/1....et.empty_label Посмотрите, пожалуйста, на код: я поставил две точки останова. И посиотрите на картинку. При этом если дата заполнена полностью или не заполнена вовсе, то я останавливаюсь на обеих точках останова. А вот если я выбираю только месяц, то отладчик не останавливается ни на точке останова № 1, ни на точке № 2. А взрывается уже в CreateView. Я понять ничего не могу: это же форма, она должна уметь делать валидацию. Ничего себе - во вьюху пропускаю ошибку и поймать не могу.

Выручайте, пожалуйста: как сделать валидацию формы, чтобы ловила эту ошибку?

Листинг программы
  1. class FrameDate(models.Model):
  2. through_date = models.DateField(null=True,
  3. blank=True,
  4. verbose_name=_("through"))
  5. ...
  6. class FrameDateForm(ModelForm):
  7. def clean_through_date(self):
  8. pass # Breakpoint
  9. def clean(self):
  10. pass # Breakpoint 2
  11. class Meta:
  12. model = FrameDate
  13. exclude = []
  14. years = range(1800, datetime.datetime.now().year + 1)
  15. widgets = {
  16. 'frame': forms.HiddenInput(),
  17. 'from_date': forms.SelectDateWidget(years=years),
  18. 'through_date': forms.SelectDateWidget(years=years)
  19. }

Решение задачи: «SelectDateWidget и неполное заполнение даты (например, выбран только месяц)»

textual
Листинг программы
  1. Traceback (most recent call last):
  2.   File "/home/michael/PycharmProjects/venv/photoarchive/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
  3.     response = get_response(request)
  4.   File "/home/michael/PycharmProjects/venv/photoarchive/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
  5.     response = self.process_exception_by_middleware(e, request)
  6.   File "/home/michael/PycharmProjects/venv/photoarchive/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
  7.     response = wrapped_callback(request, *callback_args, **callback_kwargs)
  8.   File "/home/michael/PycharmProjects/venv/photoarchive/lib/python3.6/site-packages/django/views/generic/base.py", line 68, in view
  9.     return self.dispatch(request, *args, **kwargs)
  10.   File "/home/michael/PycharmProjects/venv/photoarchive/lib/python3.6/site-packages/django/contrib/auth/mixins.py", line 56, in dispatch
  11.     return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs)
  12.   File "/home/michael/PycharmProjects/photoarchive_2/photoarchive/general/view_mixins.py", line 61, in dispatch
  13.     **kwargs);
  14.   File "/home/michael/PycharmProjects/venv/photoarchive/lib/python3.6/site-packages/django/views/generic/base.py", line 88, in dispatch
  15.     return handler(request, *args, **kwargs)
  16.   File "/home/michael/PycharmProjects/venv/photoarchive/lib/python3.6/site-packages/django/views/generic/edit.py", line 217, in post
  17.     return super(BaseCreateView, self).post(request, *args, **kwargs)
  18.   File "/home/michael/PycharmProjects/venv/photoarchive/lib/python3.6/site-packages/django/views/generic/edit.py", line 182, in post
  19.     if form.is_valid():
  20.   File "/home/michael/PycharmProjects/photoarchive_2/photoarchive/framedates/forms.py", line 79, in is_valid
  21.     self.handle_from_through_date("through")
  22.   File "/home/michael/PycharmProjects/photoarchive_2/photoarchive/framedates/forms.py", line 55, in handle_from_through_date
  23.     valid_day = self.ceil_day(user_day, user_month, user_year)
  24.   File "/home/michael/PycharmProjects/photoarchive_2/photoarchive/framedates/forms.py", line 39, in ceil_day
  25.     number_of_days_in_month = get_number_of_days_in_month(year_int, month_int)
  26.   File "/home/michael/PycharmProjects/photoarchive_2/photoarchive/general/utils.py", line 51, in get_number_of_days_in_month
  27.     __, number_of_days_in_month = calendar.monthrange(year_int, month_int)
  28.   File "/usr/lib/python3.6/calendar.py", line 124, in monthrange
  29.     day1 = weekday(year, month, 1)
  30.   File "/usr/lib/python3.6/calendar.py", line 116, in weekday
  31.     return datetime.date(year, month, day).weekday()
  32. ValueError: year 0 is out of range
  33. [17/Jun/2017 09:30:24] "POST /frames/13/framedates/create/ HTTP/1.1" 500 21115

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы