Skip to content

Commit

Permalink
Fixed #15912 -- Ensured that forms.CharField.widget_attrs() always …
Browse files Browse the repository at this point in the history
…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
  • Loading branch information
jphalip committed Nov 15, 2011
1 parent fae75a3 commit a6ccc8c
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 1 deletion.
4 changes: 3 additions & 1 deletion django/forms/fields.py
Expand Up @@ -197,9 +197,11 @@ def to_python(self, value):
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 = {
Expand Down
17 changes: 17 additions & 0 deletions tests/regressiontests/forms/tests/fields.py
Expand Up @@ -136,6 +136,23 @@ def test_charfield_5(self):
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):
Expand Down

0 comments on commit a6ccc8c

Please sign in to comment.