Django User(AbstractUser)包含外键

时间:2014-05-22 02:58:41

标签: django django-models django-syncdb

我正在试图弄清楚如何处理这种情况,其中我的用户类(扩展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脚本中创建一个也是员工的超级用户,而employee / superuser不能有null store_id。

如果这是真的,那么如何改变这一点,以便1)超级用户不是“员工”,或2)我仍然可以创建一个没有此错误的超级用户员工?提前谢谢。

编辑:我还想保持每个员工都必须有商店,并避免设置null = true&模型定义中的blank = true。

1 个答案:

答案 0 :(得分:0)

您可以重写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模型