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

时间:2015-12-14 10:25:38

标签: django validation django-forms

我使用formset保存我的数据,但当其中一个表单无效时,这意味着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}))

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

1 个答案:

答案 0 :(得分:4)

您可以使用test,test,test,http://google.com/image.jpg,test,test,test 访问formset的错误。它是一个列表,其中包含formset中每个表单的错误。

如果您想单独处理表单,可以循环使用表单集的表单。然后,您可以像往常一样处理每个表单,检查formset.errorsform.is_valid()form.errors等等。

form.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

访问这些内容