Django 覆盖默认管理员注册表单
Django override default admin register form
我知道如何覆盖 UserCreationForm
但它只适用于用户,不适用于管理员注册。
这是我的案例...
我修改了默认用户模型,它现在有不能为空的字段user_company
:
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
时,输入管理员用户名和密码后,出现
错误
the field user_company
cannot be Null
您不是在数据库中创建一个新的 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)
我知道如何覆盖 UserCreationForm
但它只适用于用户,不适用于管理员注册。
这是我的案例...
我修改了默认用户模型,它现在有不能为空的字段user_company
:
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
时,输入管理员用户名和密码后,出现
the field
user_company
cannot be Null
您不是在数据库中创建一个新的 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)