Django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL ссылается на модель 'tools.User', которая не была установлена
Я хочу заменить оригинального пользователя django на своего собственного, но произошла следующая ошибка
Это мой settings.py, я в основном добавилv AUTH_USER_MODEL = 'tools.User'
Основная структура выглядит следующим образом. Пользователь в models.py
├─backend
│ │ asgi.py
│ │ routing.py
│ │ settings.py
│ │ urls.py
│ │ wsgi.py
│ │ __init__.py
│
├─tools
│ │ admin.py
│ │ apps.py
│ │ tests.py
│ │ views.py
│ │ __init__.py
│ │
│ ├─migrations
│ │
│ ├─models
│ │ │ models.py
│ │ │ __init__.py
│ ├─urls
│ │ │ index.py
│ │ │ __init__.py
models.py
class UserManager(BaseUserManager):
def create_user(self, email, username, password=None, **extra_fields):
if not email:
raise ValueError('email error')
if not username:
raise ValueError('username error')
user = self.model(email=email, username=username, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, username, password, **extra_fields):
extra_fields.setdefault('is_superuser', True)
extra_fields.setdefault('is_staff', True)
return self.create_user(email, username, password, **extra_fields)
class User(AbstractBaseUser, PermissionsMixin):
user_id = models.BigIntegerField(primary_key=True)
username = models.CharField(max_length=255, unique=True)
email = models.EmailField(max_length=255, unique=True)
password = models.CharField(max_length=255)
avatar = models.CharField(max_length=255, blank=True, null=True)
status = models.BigIntegerField(blank=True, null=True)
role = models.CharField(max_length=7, blank=True, null=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
objects = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
def set_password(self, raw_password):
self.password = bcrypt.hashpw(raw_password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
self._password = raw_password
class Meta:
db_table = 'user'
app_label = 'tools'
class UserAdmin(BaseUserAdmin):
model = User
fieldsets = (
(None, {'fields': ('email', 'username', 'password', 'avatar', 'status', 'role', 'is_active', 'is_staff')}),
('Permissions', {'fields': ('is_superuser',)}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('email', 'username', 'password1', 'password2', 'is_staff', 'is_active', 'is_superuser')}
),
)
list_display = ('email', 'username', 'is_staff')
search_fields = ('email', 'username')
ordering = ('email',)
В каталоге tools:
есть файл admin.py.admin.site.register(User, UserAdmin)
Когда запустили python manage.py makemigrations
и # AUTH_USER_MODEL = 'tools.User
, это произошло ниже,
SystemCheckError: System check identified some issues:
ERRORS:
auth.User.groups: (fields.E304) Reverse accessor 'Group.user_set' for 'auth.User.groups' clashes with reverse accessor for 'tools.User.groups'.
HINT: Add or change a related_name argument to the definition for 'auth.User.groups' or 'tools.User.groups'.
auth.User.user_permissions: (fields.E304) Reverse accessor 'Permission.user_set' for 'auth.User.user_permissions' clashes with reverse accessor for 'tools.User.user_permissions'.
HINT: Add or change a related_name argument to the definition for 'auth.User.user_permissions' or 'tools.User.user_permissions'.
tools.User.groups: (fields.E304) Reverse accessor 'Group.user_set' for 'tools.User.groups' clashes with reverse accessor for 'auth.User.groups'.
HINT: Add or change a related_name argument to the definition for 'tools.User.groups' or 'auth.User.groups'.
tools.User.user_permissions: (fields.E304) Reverse accessor 'Permission.user_set' for 'tools.User.user_permissions' clashes with reverse accessor for 'auth.User.user_permissions'.
HINT: Add or change a related_name argument to the definition for 'tools.User.user_permissions' or 'auth.User.user_permissions'.
Надеюсь, вы сможете предложить мне решение этой проблемы или другие способы реализации моих идей.
Согласно официальной документации, UserAdmin (BaseUserAdmin)
нужно помещать в admin.py
инструментов, а не в его models.py
файл, используя admin.site.register(User, UserAdmin)
в admin.py
, а затем выполняя python manage.py makemigrations
, у меня это работает.