Django Formsets:识别表单集中的无效表单
Django Formsets: Identifying the invalid form within a formset
我正在使用 formset 保存我的数据,但是当其中一个表单无效时,这意味着 my_model_formset.is_valid()
return False
我不知道哪个无效。我如何才能准确找到无效的表单,因此我 return 向用户发送了一条准确的错误消息:
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}))
事实上,另外我还希望能够忽略无效表单并仅保存有效表单。
您可以使用 formset.errors
访问表单集的错误。这是一个列表,其中包含表单集中每个表单的错误。
如果要单独处理表单,可以遍历表单集的表单。然后您可以像往常一样处理每个表单,检查 form.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
请注意,可能存在不属于特定表格的错误。您可以使用 formset.non_form_errors()
.
访问这些
我正在使用 formset 保存我的数据,但是当其中一个表单无效时,这意味着 my_model_formset.is_valid()
return False
我不知道哪个无效。我如何才能准确找到无效的表单,因此我 return 向用户发送了一条准确的错误消息:
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}))
事实上,另外我还希望能够忽略无效表单并仅保存有效表单。
您可以使用 formset.errors
访问表单集的错误。这是一个列表,其中包含表单集中每个表单的错误。
如果要单独处理表单,可以遍历表单集的表单。然后您可以像往常一样处理每个表单,检查 form.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
请注意,可能存在不属于特定表格的错误。您可以使用 formset.non_form_errors()
.