Fixed #15912 -- Ensured that `forms.CharField.widget_attrs()` always returns a dictionary. Thanks to tsabi and rubyruy for the report and to mmcnickle and prestontimmons for the patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17096 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
fae75a32ee
commit
a6ccc8cc06
|
@ -197,9 +197,11 @@ class CharField(Field):
|
||||||
return smart_unicode(value)
|
return smart_unicode(value)
|
||||||
|
|
||||||
def widget_attrs(self, widget):
|
def widget_attrs(self, widget):
|
||||||
|
attrs = super(CharField, self).widget_attrs(widget)
|
||||||
if self.max_length is not None and isinstance(widget, (TextInput, PasswordInput)):
|
if self.max_length is not None and isinstance(widget, (TextInput, PasswordInput)):
|
||||||
# The HTML attribute is maxlength, not max_length.
|
# The HTML attribute is maxlength, not max_length.
|
||||||
return {'maxlength': str(self.max_length)}
|
attrs.update({'maxlength': str(self.max_length)})
|
||||||
|
return attrs
|
||||||
|
|
||||||
class IntegerField(Field):
|
class IntegerField(Field):
|
||||||
default_error_messages = {
|
default_error_messages = {
|
||||||
|
|
|
@ -136,6 +136,23 @@ class FieldsTests(SimpleTestCase):
|
||||||
self.assertEqual(f.max_length, None)
|
self.assertEqual(f.max_length, None)
|
||||||
self.assertEqual(f.min_length, 10)
|
self.assertEqual(f.min_length, 10)
|
||||||
|
|
||||||
|
def test_charfield_widget_attrs(self):
|
||||||
|
"""
|
||||||
|
Ensure that CharField.widget_attrs() always returns a dictionary.
|
||||||
|
Refs #15912
|
||||||
|
"""
|
||||||
|
# Return an empty dictionary if max_length is None
|
||||||
|
f = CharField()
|
||||||
|
self.assertEqual(f.widget_attrs(TextInput()), {})
|
||||||
|
|
||||||
|
# Or if the widget is not TextInput or PasswordInput
|
||||||
|
f = CharField(max_length=10)
|
||||||
|
self.assertEqual(f.widget_attrs(HiddenInput()), {})
|
||||||
|
|
||||||
|
# Otherwise, return a maxlength attribute equal to max_length
|
||||||
|
self.assertEqual(f.widget_attrs(TextInput()), {'maxlength': '10'})
|
||||||
|
self.assertEqual(f.widget_attrs(PasswordInput()), {'maxlength': '10'})
|
||||||
|
|
||||||
# IntegerField ################################################################
|
# IntegerField ################################################################
|
||||||
|
|
||||||
def test_integerfield_1(self):
|
def test_integerfield_1(self):
|
||||||
|
|
Loading…
Reference in New Issue