В Django 5.1 разница между Model и AbstractUser

Я просматриваю документацию по Django и немного смущен различиями между:

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

Я попытался выполнить следующее в классе и получил сообщение об ошибке, относящееся к следующему разделу: Множественное наследование Python и MRO

Ошибка возникла из-за того, что я выполнил следующее:

class Employee(Model, AbstractUser):
   pass

Когда я начал выполнять миграцию в Django, появилось сообщение об ошибке, в котором говорилось, что это нарушает MRO. Когда я искал, что это значит в Google, я нашел сообщение о переполнении стека, в котором упоминается, что это происходит, когда он не может выбрать между двумя классами, конкретным значением или методом.

В моем исследовании, возможно, существует конфликт между похожими методами в классе.

Я ожидаю, что у меня будет сотрудник, который имеет пользовательскую аутентификацию и является объектом в базе данных. Как бы я этого добился, должен ли я выбирать AbstractUser вместо Model, а не использовать их оба?

AbstractUser уже наследуется от Model, так что вам не нужно выбирать между ними - использование AbstractUser само по себе дает вам их оба.

Итак, сделайте это:

class Employee(AbstractUser):
   pass

Вот цепочка наследования для AbstractUser:

# django.contrib.auth.models
class AbstractUser(AbstractBaseUser, PermissionsMixin):
    ...

# django.contrib.auth.base_user
class AbstractBaseUser(models.Model):
    ...
Вернуться на верх