Пользователь Django (AbstractUser) содержит внешний ключ

Я пытаюсь выяснить, как справиться с этой ситуацией, в которой мой пользовательский класс (который расширяет AbstractUser) содержит внешний ключ для другого объекта. Например,

Class Store(models.Model):
    #attributes

Class Employee(AbstractUser):
    store = models.ForeignKey('Store')
    #other attributes

Когда я запускаю syncdb, я получаю сообщение об ошибке:

django.db.utils.IntegrityError: (1048, "Column 'store_id' cannot be null")

Я полагаю, что получаю эту ошибку, потому что он пытается создать суперпользователя в сценарии syncdb, который также является сотрудником, а сотрудник / суперпользователь не может иметь нулевой store_id.

Если это правда, как можно изменить это так, чтобы либо 1) суперпользователь не был "сотрудником", либо 2) я все еще мог создать сотрудника суперпользователя без этой ошибки? Заранее спасибо.

Изменить: Я также хотел бы сохранить тот факт, что у каждого сотрудника должен быть магазин, и избегать установки null=true & blank=true в определении модели.

1 ответ

Решение

Вы можете переписать команды create_user и create_superuser, например:

from django.contrib.auth.models import BaseUserManager

class EmployeeManager(BaseUserManager):

    def create_user(self, email, password=None, **kwargs):
        user = self.model(email=email, **kwargs)
        user.set_password(password)
        user.store = default_user_store
        user.save()
        return user

    def create_superuser(self, email, password, **kwargs):
        user = self.model(
            email=email, is_staff=True, is_superuser=True, **kwargs)
        user.set_password(password)
        user.store = default_superuser_store
        user.save()
        return user

и добавить objects = EmployeeManager() на ваш Employee модель

Другие вопросы по тегам