Django表单初始化覆盖';选择一个有效选项';表单验证错误
我正试图覆盖Django表单初始化覆盖';选择一个有效选项';表单验证错误,django,python-3.x,Django,Python 3.x,我正试图覆盖\uuu init\uuuu方法,以更新表单角色字段上的查询集。这将引发一个验证错误,该错误表示: 选择一个有效的选项。该选择不是可用的选择之一 ..然后返回此角色字段中没有选项的表单 forms.py class UserRegisterForm(UserCreationForm): role = forms.ModelChoiceField( queryset=EmployeeType.objects.all(), empty_label=
\uuu init\uuuu
方法,以更新表单角色
字段上的查询集。这将引发一个验证错误,该错误表示:
选择一个有效的选项。该选择不是可用的选择之一
..然后返回此角色字段中没有选项的表单
forms.py
class UserRegisterForm(UserCreationForm):
role = forms.ModelChoiceField(
queryset=EmployeeType.objects.all(),
empty_label=None,
required=False)
supervisor = forms.ModelChoiceField(
queryset=Employee.objects.all(),
required=False)
def __init__(self, *args, **kwargs):
self.company = (kwargs.pop('company', None))
super(UserRegisterForm, self).__init__(*args, **kwargs)
self.fields['role'].queryset = EmployeeType.objects.filter(company=self.company)
self.fields['supervisor'].queryset = Employee.objects.filter(company=self.company, supervisor=None)
def register(request):
if request.method == 'POST':
form = UserRegisterForm(request.POST)
if form.is_valid():
form.save()
employee = Employee.objects.get(username=form.instance)
user_count = request.tenant.employee_set.count()
if user_count > 1:
form.instance.is_active = False
if form.instance.role:
group_obj = form.instance.role.group
group = Group.objects.get(name=group_obj)
employee.groups.add(group)
company = request.tenant
form.instance.company = company
return redirect('verify-redirect')
else:
form = UserRegisterForm(company=request.tenant)
return render(request, 'employees/register.html', {'form': form})
视图.py
class UserRegisterForm(UserCreationForm):
role = forms.ModelChoiceField(
queryset=EmployeeType.objects.all(),
empty_label=None,
required=False)
supervisor = forms.ModelChoiceField(
queryset=Employee.objects.all(),
required=False)
def __init__(self, *args, **kwargs):
self.company = (kwargs.pop('company', None))
super(UserRegisterForm, self).__init__(*args, **kwargs)
self.fields['role'].queryset = EmployeeType.objects.filter(company=self.company)
self.fields['supervisor'].queryset = Employee.objects.filter(company=self.company, supervisor=None)
def register(request):
if request.method == 'POST':
form = UserRegisterForm(request.POST)
if form.is_valid():
form.save()
employee = Employee.objects.get(username=form.instance)
user_count = request.tenant.employee_set.count()
if user_count > 1:
form.instance.is_active = False
if form.instance.role:
group_obj = form.instance.role.group
group = Group.objects.get(name=group_obj)
employee.groups.add(group)
company = request.tenant
form.instance.company = company
return redirect('verify-redirect')
else:
form = UserRegisterForm(company=request.tenant)
return render(request, 'employees/register.html', {'form': form})
如何修复表单验证错误?当请求方法为POST时,初始化表单时您没有传递公司
form = UserRegisterForm(request.POST)
这导致您将角色
字段的查询集设置为员工类型
s,其中公司为空
# self.company will be None
self.fields['role'].queryset = EmployeeType.objects.filter(company=self.company)
你需要通过公司
form = UserRegisterForm(request.POST, company=request.tenant)
你能分享初始化表单的视图吗?绝对可以!我希望不需要:)一秒钟。。