#26381: UserCreationForm cannot be reused with a custom USERNAME_FIELD value
------------------------------+--------------------
     Reporter:  berkerpeksag  |      Owner:  nobody
         Type:  Bug           |     Status:  new
    Component:  contrib.auth  |    Version:  1.9
     Severity:  Normal        |   Keywords:
 Triage Stage:  Unreviewed    |  Has patch:  0
Easy pickings:  0             |      UI/UX:  0
------------------------------+--------------------
 I noticed this while working on #25617. If you have a custom user model
 with `USERNAME_FIELD = 'email'`, you can't just subclass
 `UserCreationForm`.

 Here is a test case:

 {{{
 diff --git a/tests/auth_tests/test_forms.py
 b/tests/auth_tests/test_forms.py
 index 6172c44..1d4cd48 100644
 --- a/tests/auth_tests/test_forms.py
 +++ b/tests/auth_tests/test_forms.py
 @@ -20,7 +20,7 @@ from django.utils.encoding import force_text
  from django.utils.text import capfirst
  from django.utils.translation import ugettext as _

 -from .models.custom_user import ExtensionUser
 +from .models.custom_user import CustomUser, ExtensionUser
  from .settings import AUTH_TEMPLATES


 @@ -139,6 +139,22 @@ class UserCreationFormTest(TestDataMixin, TestCase):
          form = CustomUserCreationForm(data)
          self.assertTrue(form.is_valid())

 +
 @override_settings(AUTH_MODEL='auth_tests.models.custom_user.CustomUser')
 +    def test_custom_form_with_different_username_field(self):
 +        class CustomUserCreationForm(UserCreationForm):
 +            class Meta(UserCreationForm.Meta):
 +                model = CustomUser
 +                fields = ('email', 'date_of_birth')
 +
 +        data = {
 +            'email': '[email protected]',
 +            'password1': 'testclient',
 +            'password2': 'testclient',
 +            'date_of_birth': '1988-02-24',
 +        }
 +        form = CustomUserCreationForm(data)
 +        self.assertTrue(form.is_valid())
 +
      def test_password_whitespace_not_stripped(self):
          data = {
              'username': 'testuser',
 }}}

 And here is the traceback:

 {{{
 Traceback (most recent call last):
   File "/home/berker/projects/django/django/test/utils.py", line 208, in
 inner
     return func(*args, **kwargs)
   File "/home/berker/projects/django/tests/auth_tests/test_forms.py", line
 155, in test_custom_form_with_different_username_field
     form = CustomUserCreationForm(data)
   File "/home/berker/projects/django/django/contrib/auth/forms.py", line
 85, in __init__
     self.fields['username'].widget.attrs.update({'autofocus': ''})
 KeyError: u'username'
 }}}

 I will open a oull request to fix this shortly.

--
Ticket URL: <https://code.djangoproject.com/ticket/26381>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/055.36db20db3538190d6e1e02ba4d996b48%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to