summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/forms/widgets.py4
-rw-r--r--tests/forms_tests/tests/test_widgets.py3
2 files changed, 5 insertions, 2 deletions
diff --git a/django/forms/widgets.py b/django/forms/widgets.py
index fedd78c838..2ce3f42d6a 100644
--- a/django/forms/widgets.py
+++ b/django/forms/widgets.py
@@ -977,10 +977,10 @@ class SelectDateWidget(Widget):
year_val, month_val, day_val = v.year, v.month, v.day
except ValueError:
pass
- else:
+ if year_val is None:
match = self.date_re.match(value)
if match:
- year_val, month_val, day_val = [int(v) for v in match.groups()]
+ year_val, month_val, day_val = [int(val) for val in match.groups()]
html = {}
choices = [(i, i) for i in self.years]
html['year'] = self.create_select(name, self.year_field, value, year_val, choices, self.year_none_value)
diff --git a/tests/forms_tests/tests/test_widgets.py b/tests/forms_tests/tests/test_widgets.py
index fc8ac93721..93384737f8 100644
--- a/tests/forms_tests/tests/test_widgets.py
+++ b/tests/forms_tests/tests/test_widgets.py
@@ -1875,6 +1875,9 @@ class SelectDateWidgetTests(TestCase):
""",
)
+ # Even with an invalid date, the widget should reflect the entered value (#17401).
+ self.assertEqual(w.render('mydate', '2010-02-30').count('selected="selected"'), 3)
+
# Years before 1900 work
w = SelectDateWidget(years=('1899',))
self.assertEqual(