Fixed #17165 -- Fixed `SelectDateWidget._has_changed()` to work correctly with a localized date format.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17071 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
af7688dbec
commit
b2948d8179
|
@ -134,3 +134,8 @@ class SelectDateWidget(Widget):
|
||||||
s = Select(choices=choices)
|
s = Select(choices=choices)
|
||||||
select_html = s.render(field % name, val, local_attrs)
|
select_html = s.render(field % name, val, local_attrs)
|
||||||
return select_html
|
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)
|
|
@ -17,6 +17,9 @@ from .error_messages import AssertFormErrorsMixin
|
||||||
class GetDate(Form):
|
class GetDate(Form):
|
||||||
mydate = DateField(widget=SelectDateWidget)
|
mydate = DateField(widget=SelectDateWidget)
|
||||||
|
|
||||||
|
class GetDateShowHiddenInitial(Form):
|
||||||
|
mydate = DateField(widget=SelectDateWidget, show_hidden_initial=True)
|
||||||
|
|
||||||
class FormsExtraTestCase(unittest.TestCase, AssertFormErrorsMixin):
|
class FormsExtraTestCase(unittest.TestCase, AssertFormErrorsMixin):
|
||||||
###############
|
###############
|
||||||
# Extra stuff #
|
# Extra stuff #
|
||||||
|
@ -697,6 +700,60 @@ class FormsExtraL10NTestCase(unittest.TestCase):
|
||||||
w = SelectDateWidget(years=('1899',))
|
w = SelectDateWidget(years=('1899',))
|
||||||
self.assertEqual(w.value_from_datadict({'date_year': '1899', 'date_month': '8', 'date_day': '13'}, {}, 'date'), '13-08-1899')
|
self.assertEqual(w.value_from_datadict({'date_year': '1899', 'date_month': '8', 'date_day': '13'}, {}, 'date'), '13-08-1899')
|
||||||
|
|
||||||
|
def test_l10n_date_changed(self):
|
||||||
|
"""
|
||||||
|
Ensure that SelectDateWidget._has_changed() works correctly with a
|
||||||
|
localized date format.
|
||||||
|
Refs #17165.
|
||||||
|
"""
|
||||||
|
# With Field.show_hidden_initial=False -----------------------
|
||||||
|
b = GetDate({
|
||||||
|
'mydate_year': '2008',
|
||||||
|
'mydate_month': '4',
|
||||||
|
'mydate_day': '1',
|
||||||
|
}, initial={'mydate': datetime.date(2008, 4, 1)})
|
||||||
|
self.assertFalse(b.has_changed())
|
||||||
|
|
||||||
|
b = GetDate({
|
||||||
|
'mydate_year': '2008',
|
||||||
|
'mydate_month': '4',
|
||||||
|
'mydate_day': '2',
|
||||||
|
}, initial={'mydate': datetime.date(2008, 4, 1)})
|
||||||
|
self.assertTrue(b.has_changed())
|
||||||
|
|
||||||
|
# With Field.show_hidden_initial=True ------------------------
|
||||||
|
b = GetDateShowHiddenInitial({
|
||||||
|
'mydate_year': '2008',
|
||||||
|
'mydate_month': '4',
|
||||||
|
'mydate_day': '1',
|
||||||
|
'initial-mydate': HiddenInput()._format_value(datetime.date(2008, 4, 1))
|
||||||
|
}, initial={'mydate': datetime.date(2008, 4, 1)})
|
||||||
|
self.assertFalse(b.has_changed())
|
||||||
|
|
||||||
|
b = GetDateShowHiddenInitial({
|
||||||
|
'mydate_year': '2008',
|
||||||
|
'mydate_month': '4',
|
||||||
|
'mydate_day': '22',
|
||||||
|
'initial-mydate': HiddenInput()._format_value(datetime.date(2008, 4, 1))
|
||||||
|
}, initial={'mydate': datetime.date(2008, 4, 1)})
|
||||||
|
self.assertTrue(b.has_changed())
|
||||||
|
|
||||||
|
b = GetDateShowHiddenInitial({
|
||||||
|
'mydate_year': '2008',
|
||||||
|
'mydate_month': '4',
|
||||||
|
'mydate_day': '22',
|
||||||
|
'initial-mydate': HiddenInput()._format_value(datetime.date(2008, 4, 1))
|
||||||
|
}, initial={'mydate': datetime.date(2008, 4, 22)})
|
||||||
|
self.assertTrue(b.has_changed())
|
||||||
|
|
||||||
|
b = GetDateShowHiddenInitial({
|
||||||
|
'mydate_year': '2008',
|
||||||
|
'mydate_month': '4',
|
||||||
|
'mydate_day': '22',
|
||||||
|
'initial-mydate': HiddenInput()._format_value(datetime.date(2008, 4, 22))
|
||||||
|
}, initial={'mydate': datetime.date(2008, 4, 1)})
|
||||||
|
self.assertFalse(b.has_changed())
|
||||||
|
|
||||||
def test_l10n_invalid_date_in(self):
|
def test_l10n_invalid_date_in(self):
|
||||||
# Invalid dates shouldn't be allowed
|
# Invalid dates shouldn't be allowed
|
||||||
a = GetDate({'mydate_month':'2', 'mydate_day':'31', 'mydate_year':'2010'})
|
a = GetDate({'mydate_month':'2', 'mydate_day':'31', 'mydate_year':'2010'})
|
||||||
|
|
Loading…
Reference in New Issue