Пользовательская модель mixin с django - PullRequest
0 голосов
/ 19 февраля 2019

Я создаю собственную модель User в Django.У меня уже был базовый класс для моих моделей, который я теперь разделил с помощью миксина:

from django.db.models import Manager as DjangoModel

class ModelMixin(DjangoModel):

    class Meta:
        abstract = True

    objects = Manager() # Not relevant

    creation_date = DateTimeField(auto_now_add=True,
        help_text=_('The date in which the database entry was created'),
        verbose_name=_('Creation date'))

    last_update = DateTimeField(auto_now=True,
        help_text=_('The last time that the database entry was updated'),
        verbose_name=_('Last update'))

class Model(ModelMixin):

    class Meta(ModelMixin.Meta):
        abstract = True

Model должен быть базовым классом почти для всех моделей, которые я создаю.В этом случае я пытаюсь унаследовать от AbstractBaseUser и ModelMixin:

class User(AbstractBaseUser, ModelMixin):

    objects = UserManager()

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    email = EmailField(unique=True,
        help_text=_('Email address'),
        error_messages={
            'unique': _('This email address is already registered.')
        }
    )

    is_active = BooleanField(
        default=False,
        help_text=_('Whether the user is active')
    )

Однако миксин-миграции применяются , а не , как я вижу, описываятаблица в базе данных:

CREATE TABLE IF NOT EXISTS "futils_user" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "password" varchar(128) NOT NULL, "last_login" datetime NULL, "email" varchar(254) NOT NULL UNIQUE, "is_active" bool NOT NULL);

Обратите внимание, что поля creation_date и last_update отсутствуют.Что не так с этим делать?

1 Ответ

0 голосов
/ 19 февраля 2019

Вы используете from django.db.models import Manager as DjangoModel вместо django.db.models import Model as DjangoModel.Поскольку поля не определены в подклассе Model, Django не выбирает их как допустимые поля.

...