传递空查询集以在form_invalid

时间:2017-11-05 11:53:19

标签: django django-forms django-views

我有一个模型表单,其中包含学生的下拉列表(ModelMultipleChoiceField),该列表最初为空,但当用户选择教师时,我会通过ajax获取为该教师注册的学生列表请求。

        self.fields['pupil'] = forms.ModelMultipleChoiceField(queryset=Pupil.objects.none(),)

一切正常,直到验证。由于最初的查询集指向无,因此在提交表单时会返回错误"这是无效的选择"。

我可以将整个学生集传递到pupil字段,然后通过jQuery将其设置为空,但这看起来很难看。这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以按照以下方式执行此操作。在这种情况下,首先使用ajax加载选项后,我们使用空查询集渲染表单。您将通过发布请求提交数据。当我们收到$ rails routes | grep article ... article GET /articles/:slug(.:format) articles#show 请求时,我们会向表单发送完整的查询集。 在上面的例子中,您解释了查询集为空,因此您将验证错误视为无效选择。但是,在这种情况下,我们有完整的查询集,因此它将完美地工作。

views.py

POST

forms.py

def sample_view(request):
    if request.method == 'POST':
        queryset = Pupil.objects.all()
        form = SampleForm(request.POST, queryset=queryset)
        # your code goes here
    else:
        queryset = Pupil.objects.none()
        form = SampleForm(queryset=queryset)
        # your code goes here