Пользователь 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
модель