我在ForeignKey
模型上有一个User
字段。
company = models.ForeignKey('crm.Company')
所以每个用户都需要有一家公司。
问题是create_super_user
方法在项目开始时没有company
,我收到以下错误:
django.db.utils.OperationalError: (1054, "Unknown column 'users_user.company_id' in 'field list'")
因此,最好只创建默认Company
并将其与get_or_create
分配如下:
def create_superuser(self, email, password, **kwargs):
company, created = Company.objects.get_or_create(
name='Default Company',
)
kwargs.setdefault('company', company)
kwargs.setdefault('is_staff', True)
kwargs.setdefault('is_superuser', True)
kwargs.setdefault('is_active', True)
if kwargs.get('is_staff') is not True:
raise ValueError('Superuser must have staff=True')
if kwargs.get('is_superuser') is not True:
raise ValueError('Superuser must have is_superuser=True')
return self.create_user(email, password, **kwargs)
当我从命令行创建新的超级用户并且Default company
已更改时,可能会出现此问题。现在将创建一个新的Default Company
。
另一方面,我可以使用company
使null=True
字段可选,但现在会破坏每个用户与公司关联的系统规则。
我怎样才能确保公司已经创建?
答案 0 :(得分:1)
您可以将BooleanField
添加到公司模型中:
is_default = BooleanField(default=False)
现在在create_superuser
,您可以按此字段搜索公司。如果默认公司不存在,您可以使用defaults
get_or_create
参数设置新的公司名称:
company, created = Company.objects.get_or_create(
is_default=True,
defaults={'name': 'Default Company'}
)