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)    

你能分享初始化表单的视图吗?绝对可以!我希望不需要:)一秒钟。。