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

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

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

Django 1.11

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

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

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

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

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


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

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

10   голосов , оценка 4 из 5
Похожие ответы