mirror of https://github.com/django/django.git
Fixed #13968 -- Fixed SelectDateWidget processing of an invalid date input value when USE_L10N is on, for consistency with its behavior when USE_L10N=False (now the form field reports the validation error in both cases). Thanks mitar for the report.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@15416 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
0ffa39f744
commit
2d7049c4ee
|
@ -99,7 +99,7 @@ class SelectDateWidget(Widget):
|
||||||
try:
|
try:
|
||||||
date_value = datetime.date(int(y), int(m), int(d))
|
date_value = datetime.date(int(y), int(m), int(d))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
return '%s-%s-%s' % (y, m, d)
|
||||||
else:
|
else:
|
||||||
date_value = datetime_safe.new_date(date_value)
|
date_value = datetime_safe.new_date(date_value)
|
||||||
return date_value.strftime(input_format)
|
return date_value.strftime(input_format)
|
||||||
|
|
|
@ -1,19 +1,18 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import datetime
|
import datetime
|
||||||
from decimal import Decimal
|
|
||||||
import re
|
|
||||||
import time
|
import time
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.forms import *
|
from django.forms import *
|
||||||
from django.forms.extras import SelectDateWidget
|
from django.forms.extras import SelectDateWidget
|
||||||
from django.forms.util import ErrorList
|
from django.forms.util import ErrorList
|
||||||
from django.test import TestCase
|
|
||||||
from django.utils import translation
|
from django.utils import translation
|
||||||
from django.utils import unittest
|
from django.utils import unittest
|
||||||
from django.utils.encoding import force_unicode
|
from django.utils.encoding import force_unicode
|
||||||
from django.utils.encoding import smart_unicode
|
from django.utils.encoding import smart_unicode
|
||||||
from error_messages import AssertFormErrorsMixin
|
from error_messages import AssertFormErrorsMixin
|
||||||
|
|
||||||
|
class GetDate(Form):
|
||||||
|
mydate = DateField(widget=SelectDateWidget)
|
||||||
|
|
||||||
class FormsExtraTestCase(unittest.TestCase, AssertFormErrorsMixin):
|
class FormsExtraTestCase(unittest.TestCase, AssertFormErrorsMixin):
|
||||||
###############
|
###############
|
||||||
|
@ -338,9 +337,6 @@ class FormsExtraTestCase(unittest.TestCase, AssertFormErrorsMixin):
|
||||||
<option value="2016">2016</option>
|
<option value="2016">2016</option>
|
||||||
</select>""")
|
</select>""")
|
||||||
|
|
||||||
class GetDate(Form):
|
|
||||||
mydate = DateField(widget=SelectDateWidget)
|
|
||||||
|
|
||||||
a = GetDate({'mydate_month':'4', 'mydate_day':'1', 'mydate_year':'2008'})
|
a = GetDate({'mydate_month':'4', 'mydate_day':'1', 'mydate_year':'2008'})
|
||||||
self.assertTrue(a.is_valid())
|
self.assertTrue(a.is_valid())
|
||||||
self.assertEqual(a.cleaned_data['mydate'], datetime.date(2008, 4, 1))
|
self.assertEqual(a.cleaned_data['mydate'], datetime.date(2008, 4, 1))
|
||||||
|
@ -355,6 +351,11 @@ class FormsExtraTestCase(unittest.TestCase, AssertFormErrorsMixin):
|
||||||
self.assertTrue(b.is_valid())
|
self.assertTrue(b.is_valid())
|
||||||
self.assertEqual(b.cleaned_data['mydate'], datetime.date(2008, 4, 1))
|
self.assertEqual(b.cleaned_data['mydate'], datetime.date(2008, 4, 1))
|
||||||
|
|
||||||
|
# Invalid dates shouldn't be allowed
|
||||||
|
c = GetDate({'mydate_month':'2', 'mydate_day':'31', 'mydate_year':'2010'})
|
||||||
|
self.assertFalse(c.is_valid())
|
||||||
|
self.assertEqual(c.errors, {'mydate': [u'Enter a valid date.']})
|
||||||
|
|
||||||
def test_multiwidget(self):
|
def test_multiwidget(self):
|
||||||
# MultiWidget and MultiValueField #############################################
|
# MultiWidget and MultiValueField #############################################
|
||||||
# MultiWidgets are widgets composed of other widgets. They are usually
|
# MultiWidgets are widgets composed of other widgets. They are usually
|
||||||
|
@ -608,3 +609,10 @@ class FormsExtraL10NTestCase(unittest.TestCase):
|
||||||
# Years before 1900 work
|
# Years before 1900 work
|
||||||
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_invalid_date_in(self):
|
||||||
|
# Invalid dates shouldn't be allowed
|
||||||
|
a = GetDate({'mydate_month':'2', 'mydate_day':'31', 'mydate_year':'2010'})
|
||||||
|
self.assertFalse(a.is_valid())
|
||||||
|
# 'Geef een geldige datum op.' = 'Enter a valid date.'
|
||||||
|
self.assertEqual(a.errors, {'mydate': [u'Geef een geldige datum op.']})
|
||||||
|
|
Loading…
Reference in New Issue