#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': 't...@client222.com',
 +            '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 django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
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