소스 검색

Fixed #19573 -- Allow override of username field label in AuthenticationForm

Nick Sandford 12 년 전
부모
커밋
cdad0b28d4
2개의 변경된 파일11개의 추가작업 그리고 2개의 파일을 삭제
  1. 2 1
      django/contrib/auth/forms.py
  2. 9 1
      django/contrib/auth/tests/forms.py

+ 2 - 1
django/contrib/auth/forms.py

@@ -169,7 +169,8 @@ class AuthenticationForm(forms.Form):
         # Set the label for the "username" field.
         UserModel = get_user_model()
         self.username_field = UserModel._meta.get_field(UserModel.USERNAME_FIELD)
-        self.fields['username'].label = capfirst(self.username_field.verbose_name)
+        if not self.fields['username'].label:
+            self.fields['username'].label = capfirst(self.username_field.verbose_name)
 
     def clean(self):
         username = self.cleaned_data.get('username')

+ 9 - 1
django/contrib/auth/tests/forms.py

@@ -7,7 +7,7 @@ from django.contrib.auth.forms import (UserCreationForm, AuthenticationForm,
     ReadOnlyPasswordHashWidget)
 from django.contrib.auth.tests.utils import skipIfCustomUser
 from django.core import mail
-from django.forms.fields import Field, EmailField
+from django.forms.fields import Field, EmailField, CharField
 from django.test import TestCase
 from django.test.utils import override_settings
 from django.utils.encoding import force_text
@@ -138,6 +138,14 @@ class AuthenticationFormTest(TestCase):
         self.assertTrue(form.is_valid())
         self.assertEqual(form.non_field_errors(), [])
 
+    def test_username_field_label(self):
+
+        class CustomAuthenticationForm(AuthenticationForm):
+            username = CharField(label="Name", max_length=75)
+
+        form = CustomAuthenticationForm()
+        self.assertEqual(form['username'].label, "Name")
+
 
 @skipIfCustomUser
 @override_settings(USE_TZ=False, PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))