В 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):
...