使用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并将其单独传递给表单进行验证?!