我有一个模型表单,其中包含学生的下拉列表(ModelMultipleChoiceField
),该列表最初为空,但当用户选择教师时,我会通过ajax获取为该教师注册的学生列表请求。
self.fields['pupil'] = forms.ModelMultipleChoiceField(queryset=Pupil.objects.none(),)
一切正常,直到验证。由于最初的查询集指向无,因此在提交表单时会返回错误"这是无效的选择"。
我可以将整个学生集传递到pupil
字段,然后通过jQuery将其设置为空,但这看起来很难看。这样做的正确方法是什么?
答案 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