From e74ca0226a0699ac046d59159e46fddf52ff93b5 Mon Sep 17 00:00:00 2001 From: Sam Reynolds Date: Tue, 17 Sep 2019 15:21:50 +0100 Subject: [PATCH] [3.0.x] Fixed #30776 -- Restored max length validation on AuthenticationForm.UsernameField. Regression in 5ceaf14686ce626404afb6a5fbd3d8286410bf13. Thanks gopackgo90 for the report and Mariusz Felisiak for tests. Backport of 6c9778a58e4f680db180d4cc9dc5639d2ec1b40c from master --- django/contrib/auth/forms.py | 4 +++- tests/auth_tests/test_forms.py | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/django/contrib/auth/forms.py b/django/contrib/auth/forms.py index a0cfed0995..b4fb55c1b4 100644 --- a/django/contrib/auth/forms.py +++ b/django/contrib/auth/forms.py @@ -191,7 +191,9 @@ class AuthenticationForm(forms.Form): # Set the max length and label for the "username" field. self.username_field = UserModel._meta.get_field(UserModel.USERNAME_FIELD) - self.fields['username'].max_length = self.username_field.max_length or 254 + username_max_length = self.username_field.max_length or 254 + self.fields['username'].max_length = username_max_length + self.fields['username'].widget.attrs['maxlength'] = username_max_length if self.fields['username'].label is None: self.fields['username'].label = capfirst(self.username_field.verbose_name) diff --git a/tests/auth_tests/test_forms.py b/tests/auth_tests/test_forms.py index 7085dcfa11..40e3050144 100644 --- a/tests/auth_tests/test_forms.py +++ b/tests/auth_tests/test_forms.py @@ -423,6 +423,7 @@ class AuthenticationFormTest(TestDataMixin, TestCase): CustomEmailField.objects.create_user(**data) form = AuthenticationForm(None, data) self.assertEqual(form.fields['username'].max_length, 255) + self.assertEqual(form.fields['username'].widget.attrs.get('maxlength'), 255) self.assertEqual(form.errors, {}) @override_settings(AUTH_USER_MODEL='auth_tests.IntegerUsernameUser') @@ -435,6 +436,7 @@ class AuthenticationFormTest(TestDataMixin, TestCase): IntegerUsernameUser.objects.create_user(**data) form = AuthenticationForm(None, data) self.assertEqual(form.fields['username'].max_length, 254) + self.assertEqual(form.fields['username'].widget.attrs.get('maxlength'), 254) self.assertEqual(form.errors, {}) def test_username_field_label(self):