首页 > 解决方案 > 使用来自多个 CheckboxSelectMultiple 的值列表验证 django 表单

问题描述

使用 Django2.0,我设置了一个表单,它在带有复选框的列表中显示我的所有模型对象。提交后,在我的请求字典中,它将它们存储为 ID 列表。我如何在表单中验证这些?clean() 方法不会被调用。

形式:

class SampleRunSearchForm(forms.ModelForm):

    sample_run_id = forms.ModelChoiceField(
            label='Sample Run',
            queryset=SampleRun.objects.all(),
            widget=forms.CheckboxSelectMultiple,
         )

    class Meta:
        model = SampleRun
        fields = ('sample_run_id',)


    def __init__(self, *args, **kwargs):
        super(SampleRunSearchForm, self).__init__(*args, **kwargs)

        self.helper = FormHelper()
        self.helper.layout = Layout(
            Field('sample_run_id', css_class='sample-run-display',),
            HTML('<br>'),
            Submit('submit', 'Report samples', css_class='upload-btn')
            )

        self.helper.form_method = 'GET'

    def clean_sample_run_id(self): 
        sr_id = self.cleaned_data.getlist('sample_run_id')
        for sr in sr_id:
            ... do something to validate...
            else:
                raise(forms.ValidationError('Error'))
        return(sr_id)

意见:

class SearchSampleRun(View):

    samplerunform = SampleRunSearchForm
    template_name = 'results/samplerun_search_form.html'


    def get(self, request, *args, **kwargs):

        samplerunform = self.samplerunform()
        if request.GET:
            samplerunform = self.samplerunform(request.GET)
            samplerunform.is_valid()


        context = {'samplerunform': samplerunform}
        return render(request, self.template_name, context)

它向我的页面返回一个错误,它不是一个有效的选择。

clean() 方法也将执行,但 clean_sample_run_id() 不起作用 - 我是否需要遍历每个 ID 并分别通过表单进行验证?!

标签: pythondjango

解决方案


推荐阅读