我的一个观点是使用带有自定义字段清理的模型表单。一种类型的清理是检查用户是否尝试提交对已设置为该值的字段的更改,并且它通过抛出 ValidationError 完全按照我希望的方式工作。问题当然是我一次只能提交一个表单,所以我想使用一个modelformset来提交多个表单。
我知道可以覆盖modelformset的clean方法,但我问是否可以在modelformset上使用modelform的字段清理方法?. 目前,当我提交带有空字段的模型表单集时,is_valid() 通过了,这对我来说似乎很奇怪......
我也想知道“通常”自定义modelformset验证代码会去哪里?我在考虑forms.py。
*编辑——带答案。我的 httpResponseRedirect 允许在未经验证的情况下提交表单。
def mass_check_in(request):
# queryset
qs = Part.objects.none()
errlst=[]
c = {}
c.update(csrf(request))
# Creating a model_formset out of PartForm
PartFormSetFactory = modelformset_factory(model=Part,
form=PartForm,
formset=BasePartFormSet,
extra=2)
if request.method == 'POST':
PartFormSet = PartFormSetFactory(request.POST)
if PartFormSet.is_valid():
PartFormSet.save()
return http.HttpResponseRedirect('/current_count/')
else:
PartFormSet = PartFormSetFactory(queryset=qs, initial=[
{'serial_number':'placeholder',
},
{'serial_number':'placeholder'
}])
return render(request,'mass_check_in.html',{
'title':'Add Item',
'formset': PartFormSet,
'formset_errors': PartFormSet.non_form_errors(),
})