[1.2.X] Fixed #13390 -- `SplitDateTimeWidget` now recognizes when it's no longer required. Thanks vaxXxa for bug report and patch.

Backport of r13753 from trunk.


git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@13754 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Justin Bronn 2010-09-11 21:28:00 +00:00
parent e4bd5e8a2d
commit 864361aabd
2 changed files with 20 additions and 0 deletions

View File

@ -399,6 +399,8 @@ class DateTimeField(Field):
# components: date and time. # components: date and time.
if len(value) != 2: if len(value) != 2:
raise ValidationError(self.error_messages['invalid']) raise ValidationError(self.error_messages['invalid'])
if value[0] in validators.EMPTY_VALUES and value[1] in validators.EMPTY_VALUES:
return None
value = '%s %s' % tuple(value) value = '%s %s' % tuple(value)
for format in self.input_formats or formats.get_format('DATETIME_INPUT_FORMATS'): for format in self.input_formats or formats.get_format('DATETIME_INPUT_FORMATS'):
try: try:

View File

@ -1310,3 +1310,21 @@ class WidgetTests(TestCase):
# w2 ought to be independent of w1, since MultiWidget ought # w2 ought to be independent of w1, since MultiWidget ought
# to make a copy of its sub-widgets when it is copied. # to make a copy of its sub-widgets when it is copied.
self.assertEqual(w1.choices, [1,2,3]) self.assertEqual(w1.choices, [1,2,3])
def test_13390(self):
# See ticket #13390
class SplitDateForm(forms.Form):
field = forms.DateTimeField(widget=forms.SplitDateTimeWidget, required=False)
form = SplitDateForm({'field': ''})
self.assertTrue(form.is_valid())
form = SplitDateForm({'field': ['', '']})
self.assertTrue(form.is_valid())
class SplitDateRequiredForm(forms.Form):
field = forms.DateTimeField(widget=forms.SplitDateTimeWidget, required=True)
form = SplitDateRequiredForm({'field': ''})
self.assertFalse(form.is_valid())
form = SplitDateRequiredForm({'field': ['', '']})
self.assertFalse(form.is_valid())