From 56d787df99a923cf96d02f9cd07ca8d383dbc028 Mon Sep 17 00:00:00 2001 From: Jannis Leidel Date: Sat, 4 Feb 2012 16:05:58 +0000 Subject: [PATCH] Fixed #17542 -- Gracefully handle errors when checking if the values of a SelectDateWidget has changed if it's not required. Thanks, pigletto. git-svn-id: http://code.djangoproject.com/svn/django/trunk@17436 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/forms/extras/widgets.py | 9 ++++++--- tests/regressiontests/forms/tests/extra.py | 12 ++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/django/forms/extras/widgets.py b/django/forms/extras/widgets.py index 4fb4869e68..65d6bf15f5 100644 --- a/django/forms/extras/widgets.py +++ b/django/forms/extras/widgets.py @@ -136,6 +136,9 @@ class SelectDateWidget(Widget): return select_html def _has_changed(self, initial, data): - input_format = get_format('DATE_INPUT_FORMATS')[0] - data = datetime_safe.datetime.strptime(data, input_format).date() - return super(SelectDateWidget, self)._has_changed(initial, data) \ No newline at end of file + try: + input_format = get_format('DATE_INPUT_FORMATS')[0] + data = datetime_safe.datetime.strptime(data, input_format).date() + except (TypeError, ValueError): + pass + return super(SelectDateWidget, self)._has_changed(initial, data) diff --git a/tests/regressiontests/forms/tests/extra.py b/tests/regressiontests/forms/tests/extra.py index 3c5dfabb61..c873af7a8c 100644 --- a/tests/regressiontests/forms/tests/extra.py +++ b/tests/regressiontests/forms/tests/extra.py @@ -18,6 +18,9 @@ from .error_messages import AssertFormErrorsMixin class GetDate(Form): mydate = DateField(widget=SelectDateWidget) +class GetNotRequiredDate(Form): + mydate = DateField(widget=SelectDateWidget, required=False) + class GetDateShowHiddenInitial(Form): mydate = DateField(widget=SelectDateWidget, show_hidden_initial=True) @@ -619,6 +622,15 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): self.assertTrue(FormWithFile().is_multipart()) self.assertTrue(FormWithImage().is_multipart()) + def test_field_not_required(self): + b = GetNotRequiredDate({ + 'mydate_year': '', + 'mydate_month': '', + 'mydate_day': '' + }) + self.assertFalse(b.has_changed()) + + class FormsExtraL10NTestCase(TestCase): def setUp(self):