我知道如何覆盖UserCreationForm
,但它仅对用户有效,对管理员注册无效。
这是我的情况...
我修改了默认用户模型,现在它具有字段user_company
,不能为Null:
class User(AbstractUser):
user_company = models.ForeignKey("UserCompany", on_delete=models.CASCADE)
我已覆盖UserCreationForm:
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm
class UserRegisterForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
model = get_user_model()
def save(self, commit=True):
user_company = UserCompany() ## create a new company and assign it to the new user
user_company.save()
user = super(UserRegisterForm, self).save(commit=False)
user.user_company_id = user_company.pk
if commit:
user.save()
return user
所有这些对于普通用户都可以正常工作。但是,当我尝试在控制台中python manage.py createsuperuser
时,输入管理员的用户名和密码后,我得到了一个错误
字段
user_company
不能为空
答案 0 :(得分:1)
您不是在数据库中创建新的UserCompany,而只是在内存中创建对象,请替换
user_company = UserCompany() ## create a new company and assign it to the new user
类似
user_company = UserCompany.objects.create()
我认为最好将默认UserCompany的创建移至用户的保存功能中,而不要采用表单形式
class User(AbstractUser):
user_company = models.ForeignKey("UserCompany", on_delete=models.CASCADE)
def save(self, *args, **kwargs):
if getattr(self, "user_company", None) is None:
self.user_company = UserCompany.objects.create()
super(User, self).save(*args, **kwargs)