#28461: createsuperuser crashes with a ForeignKey to a CharField in 
REQUIRED_FIELDS
------------------------------+------------------------------------
     Reporter:  Kirill B.     |                    Owner:  nobody
         Type:  Bug           |                   Status:  new
    Component:  contrib.auth  |                  Version:  1.11
     Severity:  Normal        |               Resolution:
     Keywords:                |             Triage Stage:  Accepted
    Has patch:  0             |      Needs documentation:  0
  Needs tests:  0             |  Patch needs improvement:  0
Easy pickings:  0             |                    UI/UX:  0
------------------------------+------------------------------------
Changes (by Kirill B.):

 * needs_better_patch:  1 => 0
 * has_patch:  1 => 0


Old description:

> These are my models:
>
> {{{
> from uuid import uuid4
>
> from django.contrib.auth.models import AbstractUser
> from django.db import models
>

> class Company(models.Model):
>     name = models.CharField(max_length=64, primary_key=True)
>

> class User(AbstractUser):
>     uuid = models.UUIDField(primary_key=True, editable=False,
> default=uuid4)
>     company = models.ForeignKey(Company)
>
>     REQUIRED_FIELDS = ['email', 'company']
> }}}
>
> When I run `manage.py createsuperuser` I got this result:
>
> {{{
> Username: superuser
> Email address: [email protected]
> Company (Company.name): TEST
> Password:
> Password (again):
> Traceback (most recent call last):
>   File "manage.py", line 22, in <module>
>     execute_from_command_line(sys.argv)
>   File "/Users/ookami/venv/swportal/lib/python3.5/site-
> packages/django/core/management/__init__.py", line 363, in
> execute_from_command_line
>     utility.execute()
>   File "/Users/ookami/venv/swportal/lib/python3.5/site-
> packages/django/core/management/__init__.py", line 355, in execute
>     self.fetch_command(subcommand).run_from_argv(self.argv)
>   File "/Users/ookami/venv/swportal/lib/python3.5/site-
> packages/django/core/management/base.py", line 283, in run_from_argv
>     self.execute(*args, **cmd_options)
>   File "/Users/ookami/venv/swportal/lib/python3.5/site-
> packages/django/contrib/auth/management/commands/createsuperuser.py",
> line 63, in execute
>     return super(Command, self).execute(*args, **options)
>   File "/Users/ookami/venv/swportal/lib/python3.5/site-
> packages/django/core/management/base.py", line 330, in execute
>     output = self.handle(*args, **options)
>   File "/Users/ookami/venv/swportal/lib/python3.5/site-
> packages/django/contrib/auth/management/commands/createsuperuser.py",
> line 183, in handle
> self.UserModel._default_manager.db_manager(database).create_superuser(**user_data)
>   File "/Users/ookami/venv/swportal/lib/python3.5/site-
> packages/django/contrib/auth/models.py", line 170, in create_superuser
>     return self._create_user(username, email, password, **extra_fields)
>   File "/Users/ookami/venv/swportal/lib/python3.5/site-
> packages/django/contrib/auth/models.py", line 151, in _create_user
>     user = self.model(username=username, email=email, **extra_fields)
>   File "/Users/ookami/venv/swportal/lib/python3.5/site-
> packages/django/contrib/auth/base_user.py", line 68, in __init__
>     super(AbstractBaseUser, self).__init__(*args, **kwargs)
>   File "/Users/ookami/venv/swportal/lib/python3.5/site-
> packages/django/db/models/base.py", line 554, in __init__
>     _setattr(self, field.name, rel_obj)
>   File "/Users/ookami/venv/swportal/lib/python3.5/site-
> packages/django/db/models/fields/related_descriptors.py", line 216, in
> __set__
>     self.field.remote_field.model._meta.object_name,
> ValueError: Cannot assign "'TEST'": "User.company" must be a "Company"
> instance.
>
> }}}

New description:

 These are my models:

 {{{
 from uuid import uuid4

 from django.contrib.auth.models import AbstractUser
 from django.db import models


 class Company(models.Model):
     name = models.CharField(max_length=64, primary_key=True)


 class User(AbstractUser):
     uuid = models.UUIDField(primary_key=True, editable=False,
 default=uuid4)
     company = models.ForeignKey(Company)

     REQUIRED_FIELDS = ['email', 'company']
 }}}

 When I run `manage.py createsuperuser` I got this result:

 {{{
 Username: superuser
 Email address: [email protected]
 Company (Company.name): TEST
 Password:
 Password (again):
 Traceback (most recent call last):
   File "manage.py", line 22, in <module>
     execute_from_command_line(sys.argv)
   File "/Users/ookami/venv/swportal/lib/python3.5/site-
 packages/django/core/management/__init__.py", line 363, in
 execute_from_command_line
     utility.execute()
   File "/Users/ookami/venv/swportal/lib/python3.5/site-
 packages/django/core/management/__init__.py", line 355, in execute
     self.fetch_command(subcommand).run_from_argv(self.argv)
   File "/Users/ookami/venv/swportal/lib/python3.5/site-
 packages/django/core/management/base.py", line 283, in run_from_argv
     self.execute(*args, **cmd_options)
   File "/Users/ookami/venv/swportal/lib/python3.5/site-
 packages/django/contrib/auth/management/commands/createsuperuser.py", line
 63, in execute
     return super(Command, self).execute(*args, **options)
   File "/Users/ookami/venv/swportal/lib/python3.5/site-
 packages/django/core/management/base.py", line 330, in execute
     output = self.handle(*args, **options)
   File "/Users/ookami/venv/swportal/lib/python3.5/site-
 packages/django/contrib/auth/management/commands/createsuperuser.py", line
 183, in handle
 
self.UserModel._default_manager.db_manager(database).create_superuser(**user_data)
   File "/Users/ookami/venv/swportal/lib/python3.5/site-
 packages/django/contrib/auth/models.py", line 170, in create_superuser
     return self._create_user(username, email, password, **extra_fields)
   File "/Users/ookami/venv/swportal/lib/python3.5/site-
 packages/django/contrib/auth/models.py", line 151, in _create_user
     user = self.model(username=username, email=email, **extra_fields)
   File "/Users/ookami/venv/swportal/lib/python3.5/site-
 packages/django/contrib/auth/base_user.py", line 68, in __init__
     super(AbstractBaseUser, self).__init__(*args, **kwargs)
   File "/Users/ookami/venv/swportal/lib/python3.5/site-
 packages/django/db/models/base.py", line 554, in __init__
     _setattr(self, field.name, rel_obj)
   File "/Users/ookami/venv/swportal/lib/python3.5/site-
 packages/django/db/models/fields/related_descriptors.py", line 216, in
 __set__
     self.field.remote_field.model._meta.object_name,
 ValueError: Cannot assign "'TEST'": "User.company" must be a "Company"
 instance.

 }}}

 [https://github.com/django/django/pull/8846 PR]

--

-- 
Ticket URL: <https://code.djangoproject.com/ticket/28461#comment:4>
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/067.90bf0ba771f30cc32bd4d26e95272851%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to