私が持っているビューの1つは、カスタムフィールドクリーニングを使用したモデルフォームを使用することです。クリーニングの1つのタイプは、ユーザーがすでに値に設定されているフィールドに変更を送信しようとしているかどうかをチェックすることです。これは、ValidationErrorをスローすることで、希望どおりに機能します。もちろん問題は、一度に1つのフォームしか送信できないことです。そのため、modelformsetを使用して複数のフォームを送信したいと思います。
modelformsetのcleanメソッドをオーバーライドできることは知っていますが、modelformsetでmodelformのフィールドクリーニングメソッドを使用できるかどうかを尋ねています。。現在、空のフィールドを使用してmodelformsetを送信すると、is_valid()が渡されますが、これは私には奇妙に思えます...
また、カスタムモデルフォームセット検証コードがどこに「一般的に」行くのか知りたいですか?私は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(),
})