Procházet zdrojové kódy

Fixed #28751 -- Corrected the error message for inactive users in AdminAuthenticationForm.

Thanks SeungWon Kang for the report and Tim Graham for the review.
shanghui před 7 roky
rodič
revize
ebb998976e
2 změnil soubory, kde provedl 22 přidání a 3 odebrání
  1. 5 3
      django/contrib/admin/forms.py
  2. 17 0
      tests/admin_views/test_forms.py

+ 5 - 3
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',

+ 17 - 0
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.'])