Django Formsets:识别表单集中的无效表单

Dhi*_*aTN 2 django validation django-forms

我正在使用表单集来保存我的数据,但是当其中一个表单无效时,这意味着my_model_formset.is_valid()返回False,我不知道哪一个表单无效。如何准确找到哪个表单无效,以便向用户返回准确的错误消息:

def my_model_detail(request, obj_id):
    MyModel = get_object_or_404(Event, pk=obj_id)
    MyFormset = formset_factory(MyForm)
    if request.method == 'POST':
        my_model_formset = MyFormset(request.POST)
        if my_model_formset.is_valid():
            # save the all the data in atomic transaction
            # send success notification
        else:
            # detect which form within the form set is invalid
            # send error notification
            return redirect(reverse('my-model-detail-view', kwargs={'obj_id': obj_id}))
Run Code Online (Sandbox Code Playgroud)

事实上,此外我还希望能够忽略无效的表单并仅保存有效的表单。

Ala*_*air 5

您可以使用 访问表单集的错误formset.errors。它是一个包含表单集中每个表单的错误的列表。

如果要单独处理表单,可以循环遍历表单集的表单。然后,您可以像平常一样处理每个表单,检查form.is_valid()、等。form.errorsform.cleaned_data

if formset.is_valid():
    print("Formset is valid")
else:
    # Formset is invalid, process forms individually
    for form in formset:
        if form.is_valid():
            # process form
        else:
            # do something with form.errors
Run Code Online (Sandbox Code Playgroud)

请注意,可能存在不属于特定形式的错误。您可以使用 访问这些内容formset.non_form_errors()