'Creating a users and superusers with a custom `MyCompanyUser(AbstractUser)` related N:1 with `Customer(models.Model)` model
I am a Django rookie.
- I have created a
Customerclass. - I have created a custom user class
NeuroCloud(AbstractUser). - Then relate them adding a foreign key field to the custom user class.
- When I try to create a supreuser with
python manage.py createsuperuseran error (copied below) raises. The error seems to be raising because no primary key (associated toCustomer) is given/is available. - My goal is to be able to create users or superusers giving email, password and customer (no its primary key but its name which is unique).
Sorry for not being specific enough, but I am learning Django with no previous web programming experience.
The models would be something like this:
from django.contrib.auth.models import AbstractUser
from django.db import models
# Create your models here.
# TODO: docstrings (ONLY MEANINGFUL INFO!)
class Customer(models.Model):
"""
"""
date_joined = models.DateTimeField(auto_now_add=False)
class NeuroCloudUser(AbstractUser):
"""
"""
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
When I try to create a superuser, the following error raises:
Username: admin
Email address: <email hidden for privacity purposes>
Password:
Password (again):
This password is too short. It must contain at least 8 characters.
Bypass password validation and create user anyway? [y/N]: y
Traceback (most recent call last):
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
psycopg2.errors.NotNullViolation: el valor nulo en la columna «customer_id» de la relación «app_neuroclouduser» viola la restricción de no nulo
DETAIL: La fila que falla contiene (2, pbkdf2_sha256$260000$w8MF3Sc8Ld0I6bE8hBAJGP$jXkjJ7QqbalpXvrEMSxC..., null, t, admin, , , <email hidden for privacity purposes>, t, t, 2022-05-18 14:59:42.56486+00, null).
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/yere/Repositories/neurocloud/manage.py", line 22, in <module>
main()
File "/home/yere/Repositories/neurocloud/manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
utility.execute()
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/core/management/__init__.py", line 413, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/core/management/base.py", line 354, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 79, in execute
return super().execute(*args, **options)
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/core/management/base.py", line 398, in execute
output = self.handle(*args, **options)
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 189, in handle
self.UserModel._default_manager.db_manager(database).create_superuser(**user_data)
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/contrib/auth/models.py", line 163, in create_superuser
return self._create_user(username, email, password, **extra_fields)
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/contrib/auth/models.py", line 146, in _create_user
user.save(using=self._db)
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/contrib/auth/base_user.py", line 67, in save
super().save(*args, **kwargs)
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/db/models/base.py", line 726, in save
self.save_base(using=using, force_insert=force_insert,
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/db/models/base.py", line 763, in save_base
updated = self._save_table(
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/db/models/base.py", line 868, in _save_table
results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/db/models/base.py", line 906, in _do_insert
return manager._insert(
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/db/models/query.py", line 1270, in _insert
return query.get_compiler(using=using).execute_sql(returning_fields)
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1416, in execute_sql
cursor.execute(sql, params)
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/db/backends/utils.py", line 98, in execute
return super().execute(sql, params)
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/db/backends/utils.py", line 66, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
return executor(sql, params, many, context)
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/db/utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/home/yere/anaconda3/envs/neurocloud/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
django.db.utils.IntegrityError: el valor nulo en la columna «customer_id» de la relación «app_neuroclouduser» viola la restricción de no nulo
DETAIL: La fila que falla contiene (2, pbkdf2_sha256$260000$w8MF3Sc8Ld0I6bE8hBAJGP$jXkjJ7QqbalpXvrEMSxC..., null, t, admin, , , <email hidden for privacity purposes>, t, t, 2022-05-18 14:59:42.56486+00, null).
Solution 1:[1]
In
class NeuroCloudUser(AbstractUser):
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
you are declaring field connecting your custom user to customer object, but you are making it field required, so when you are trying to create superuser, it needs to have some value in customer field. To make this field not required you should add blank=True and null=True:
class NeuroCloudUser(AbstractUser):
customer = models.ForeignKey(Customer, on_delete=models.CASCADE, blank=True, null=True)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | TrueGopnik |
