diff --git a/django/forms/fields.py b/django/forms/fields.py index ff71328f52..45b425efd6 100644 --- a/django/forms/fields.py +++ b/django/forms/fields.py @@ -236,10 +236,10 @@ class CharField(Field): def widget_attrs(self, widget): attrs = super(CharField, self).widget_attrs(widget) - if self.max_length is not None: + if self.max_length is not None and not widget.is_hidden: # The HTML attribute is maxlength, not max_length. attrs['maxlength'] = str(self.max_length) - if self.min_length is not None: + if self.min_length is not None and not widget.is_hidden: # The HTML attribute is minlength, not min_length. attrs['minlength'] = str(self.min_length) return attrs diff --git a/tests/forms_tests/field_tests/test_charfield.py b/tests/forms_tests/field_tests/test_charfield.py index 906b91bc75..a08a1a4e42 100644 --- a/tests/forms_tests/field_tests/test_charfield.py +++ b/tests/forms_tests/field_tests/test_charfield.py @@ -1,7 +1,7 @@ from __future__ import unicode_literals from django.forms import ( - CharField, PasswordInput, Textarea, TextInput, ValidationError, + CharField, HiddenInput, PasswordInput, Textarea, TextInput, ValidationError, ) from django.test import SimpleTestCase @@ -79,7 +79,9 @@ class CharFieldTest(FormFieldAssertionsMixin, SimpleTestCase): def test_charfield_widget_attrs(self): """ - CharField.widget_attrs() always returns a dictionary (#15912). + CharField.widget_attrs() always returns a dictionary and includes + minlength/maxlength if min_length/max_length are defined on the field + and the widget is not hidden. """ # Return an empty dictionary if max_length and min_length are both None. f = CharField() @@ -104,6 +106,7 @@ class CharFieldTest(FormFieldAssertionsMixin, SimpleTestCase): self.assertEqual(f.widget_attrs(TextInput()), {'maxlength': '10', 'minlength': '5'}) self.assertEqual(f.widget_attrs(PasswordInput()), {'maxlength': '10', 'minlength': '5'}) self.assertEqual(f.widget_attrs(Textarea()), {'maxlength': '10', 'minlength': '5'}) + self.assertEqual(f.widget_attrs(HiddenInput()), {}) def test_charfield_strip(self): """