AUTH_USER_MODEL refers to model 'users.CustomUser' that has not been installed
Я пытаюсь создать пользовательскую модель, но чтобы я не делал все равно выдает ошибку:
Traceback (most recent call last):
File "C:\Python310\lib\site-packages\django\apps\config.py", line 270, in get_model
return self.models[model_name.lower()]
KeyError: 'customuser'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Python310\lib\site-packages\django\contrib\auth\__init__.py", line 170, in get_user_model
return django_apps.get_model(settings.AUTH_USER_MODEL, require_ready=False)
File "C:\Python310\lib\site-packages\django\apps\registry.py", line 213, in get_model
return app_config.get_model(model_name, require_ready=require_ready)
File "C:\Python310\lib\site-packages\django\apps\config.py", line 272, in get_model
raise LookupError(
LookupError: App 'users' doesn't have a 'CustomUser' model.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\django_shop\shop\manage.py", line 22, in <module>
main()
File "C:\django_shop\shop\manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "C:\Python310\lib\site-packages\django\core\management\__init__.py", line 446, in execute_from_command_line
utility.execute()
File "C:\Python310\lib\site-packages\django\core\management\__init__.py", line 420, in execute
django.setup()
File "C:\Python310\lib\site-packages\django\__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:\Python310\lib\site-packages\django\apps\registry.py", line 116, in populate
app_config.import_models()
File "C:\Python310\lib\site-packages\django\apps\config.py", line 304, in import_models
self.models_module = import_module(models_module_name)
File "C:\Python310\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "C:\django_shop\shop\users\models.py", line 2, in <module>
from django.contrib.auth.backends import BaseBackend
File "C:\Python310\lib\site-packages\django\contrib\auth\backends.py", line 5, in <module>
UserModel = get_user_model()
File "C:\Python310\lib\site-packages\django\contrib\auth\__init__.py", line 176, in get_user_model
raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL refers to model 'users.CustomUser' that has not been installed
Моя модель пользователя:
users/models.py
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
from django.utils.translation import gettext_lazy as _
from django.core.mail import send_mail
from datetime import *
class CustomUserManager(BaseUserManager):
def create_user(self, username, email, password, **other_fields):
other_fields.setdefault("is_staff", False)
other_fields.setdefault("is_superuser", False)
user = self.model(
username=username,
email=self.normalize_email(email),
**other_fields
)
user.set_password = password
user.save(using=self._db)
return user
def create_superuser(self, email, username, password, **other_fields):
other_fields.setdefault('is_staff', True)
other_fields.setdefault('is_superuser', True)
user = self.create_user(
username=username,
email=email,
password=password
**other_fields
)
if other_fields.get("is_staff") is not True:
raise ValueError("Superuser must have is_staff=True.")
if other_fields.get("is_superuser") is not True:
raise ValueError("Superuser must have is_superuser=True.")
return user
class CustomUser(AbstractBaseUser, PermissionsMixin):
username = models.CharField(
verbose_name='Username', db_index=True, max_length=16,
help_text='Enter your username', unique=True
)
first_name = models.CharField(verbose_name='First name', max_length=20, help_text='Enter your name', null=True)
last_name = models.CharField(verbose_name='Last name', max_length=20, help_text='Enter your surname')
email = models.EmailField(verbose_name='Email', help_text='Enter your email', unique=True)
sex = models.CharField(
verbose_name='Sex', max_length=6,
choices=[('Female', 'Female'), ('Male', 'Male')], null=True
)
password = models.CharField(
verbose_name='Password', max_length=16,
help_text='Enter your password'
)
date_joined = models.DateTimeField(verbose_name="date joined", default=datetime.now, editable=False)
is_staff = models.BooleanField(verbose_name='Staff', default=False)
is_active = models.BooleanField(default=True)
is_superuser = models.BooleanField(verbose_name='Superuser ', default=False)
USERNAME_FIELD = 'email'
EMAIL_FIELD = 'email'
REQUIRED_FIELDS = ['username', 'password']
objects = BaseUserManager()
class Meta:
verbose_name = _('user')
verbose_name_plural = _('users')
def get_full_name(self):
return '{0} {1}'.format(self.first_name, self.last_name)
def short_name(self):
return self.first_name
def __str__(self):
return self.username
def email_user(self, subject, message, from_email=None, **kwargs):
send_mail(subject, message, from_email, [self.email], **kwargs)
Админка:
users/admin.py
from django.contrib import admin
from .models import CustomUser
@admin.register(CustomUser)
class AdminUser(admin.ModelAdmin):
actions_on_bottom = True
actions_selection_counter = True
empty_value_display = 'Nothing'
fields = ['__all__']
list_display = ['first_name', 'last_name']
list_filter = ['last_name']
list_per_page = 10
search_fields = ['first_name', 'last_name']
Настройки:
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'catalog',
'payment',
'users'
]
AUTH_USER_MODEL = 'users.CustomUser'
Я проверял приложение на стороние ошибки, но их не было.