我有以下型号:
class CompanyRole(models.Model):
name = models.CharField(max_length=150)
def __str__(self):
return self.name
class Office(models.Model):
company_role = models.ForeignKey(CompanyRole, on_delete=models.SET_NULL, null=True)
name = models.CharField(max_length=150)
def __str__(self):
return self.name
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), unique=True)
username = models.CharField(max_length=150, unique=True)
company_role = models.ForeignKey(CompanyRole, on_delete=models.SET_NULL, null=True)
office = ChainedForeignKey(
Office,
on_delete=models.SET_NULL,
null=True,
blank=True,
chained_field="company_role",
chained_model_field="company_role",
show_all=False,
auto_choose=True,
sort=True,
)
objects = CustomAccountManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
def __str__(self):
return self.username
以及以下形式:
class RegisterForm(UserCreationForm):
office = forms.ModelChoiceField(queryset=Office.objects, empty_label='Select Office')
def __init__(self, *args, **kwargs):
super(RegisterForm, self).__init__(*args, **kwargs)
self.fields['email'].widget.attrs.pop("autofocus", None)
class Meta:
model = User
fields = ["username", "email", "company_role", "office"]
这一切都与智能选择应用程序中的链式选择一起正常工作,但是我需要显示 empty_label 以显示“选择办公室”,我通过在我的表单中添加以下行来做到这一点,如上所示:
office = forms.ModelChoiceField(queryset=Office.objects, empty_label='Select Office')
但是,由于将该行添加到我的表单中,empty_label 现在会显示,但链接选择已被破坏,就像以前一样,用户将选择公司角色,并且根据选择将填充办公室列表。
例如:公司角色选择是翻译,那么不会填充任何办公室,但是如果他们从公司角色中选择员工,那么所有办公室都会填充,但是现在所有办公室都被填充,无论选择了什么公司角色,因为将行添加到我的表单以显示空标签。如果我在表单中注释该行,则链接的 selct 将按应有的方式工作。
我感谢任何帮助解决我做错了什么的问题,或者是否有另一种方法可以为链式下拉列表添加 empty_label。提前致谢