Py学习  »  Django

Django form init override'Select a valid choice'表单验证错误

David Alford • 4 年前 • 1160 次点击  

我正试图推翻 __init__ 方法更新 roles 我的表单字段。这将引发一个验证错误,该错误表示:

选择一个有效的选项。这个选择不是一个可行的选择。

…然后返回此表单,其中没有选项 角色 字段。

表单.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)

视图.py

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})

如何修复表单验证错误?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/51663
 
1160 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Iain Shelvington
Reply   •   1 楼
Iain Shelvington    4 年前

当请求方法为POST时,您不能传递 company 当你初始化表单时

form = UserRegisterForm(request.POST)

这导致您为 role 字段到 EmployeeType 公司为空的地方

# self.company will be None
self.fields['role'].queryset = EmployeeType.objects.filter(company=self.company)

你需要通过公司

form = UserRegisterForm(request.POST, company=request.tenant)