Commit a6ccc8cc authored by Julien Phalip's avatar Julien Phalip
Browse files

Fixed #15912 -- Ensured that `forms.CharField.widget_attrs()` always returns a...

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
parent fae75a32
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -197,9 +197,11 @@ class CharField(Field):
        return smart_unicode(value)

    def widget_attrs(self, widget):
        attrs = super(CharField, self).widget_attrs(widget)
        if self.max_length is not None and isinstance(widget, (TextInput, PasswordInput)):
            # 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):
    default_error_messages = {
+17 −0
Original line number Diff line number Diff line
@@ -136,6 +136,23 @@ class FieldsTests(SimpleTestCase):
        self.assertEqual(f.max_length, None)
        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 ################################################################

    def test_integerfield_1(self):