User
モデルにはForeignKey
フィールドがあります。Djangoはオプションの関連フィールドやget_or_createを使うべきですか?
company = models.ForeignKey('crm.Company')
すべてのユーザーには会社が必要です。
問題はcreate_super_user
方法は、プロジェクトの開始時にcompany
を持っていないと私は次のエラーを取得:だから、それは単にデフォルトCompany
を作成し、それを割り当てることが最善だろう
django.db.utils.OperationalError: (1054, "Unknown column 'users_user.company_id' in 'field list'")
を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
が作成されます。
一方、null=True
でcompany
フィールドをオプションにすることはできますが、各ユーザーが会社に関連付けられているシステムルールが破られるようになりました。
他にどのようにして企業が既に作成されていることを保証できますか?