diff --git a/django/contrib/admin/forms.py b/django/contrib/admin/forms.py index b1f3bbe14d..6a641c9611 100644 --- a/django/contrib/admin/forms.py +++ b/django/contrib/admin/forms.py @@ -7,16 +7,18 @@ class AdminAuthenticationForm(AuthenticationForm): """ A custom authentication form used in the admin app. """ - error_messages = { + error_messages = dict(AuthenticationForm.error_messages) + error_messages.update({ 'invalid_login': _( "Please enter the correct %(username)s and password for a staff " "account. Note that both fields may be case-sensitive." ), - } + }) required_css_class = 'required' def confirm_login_allowed(self, user): - if not user.is_active or not user.is_staff: + super().confirm_login_allowed(user) + if not user.is_staff: raise forms.ValidationError( self.error_messages['invalid_login'], code='invalid_login', diff --git a/tests/admin_views/test_forms.py b/tests/admin_views/test_forms.py new file mode 100644 index 0000000000..8c58fe7eae --- /dev/null +++ b/tests/admin_views/test_forms.py @@ -0,0 +1,17 @@ +from django.contrib.admin.forms import AdminAuthenticationForm +from django.contrib.auth.models import User +from django.test import TestCase + + +class AdminAuthenticationFormTests(TestCase): + @classmethod + def setUpTestData(cls): + User.objects.create_user(username='inactive', password='password', is_active=False) + + def test_inactive_user(self): + data = { + 'username': 'inactive', + 'password': 'password', + } + form = AdminAuthenticationForm(None, data) + self.assertEqual(form.non_field_errors(), ['This account is inactive.'])