Django:如何正确处理自定义 form_valid() 处的错误

Django: How to handle error at custom form_valid() correctly

在自定义 form_valid() 函数中处理错误的 "correct" 方法是什么?

例如我有一个定义了这个 form_valid() 方法的视图:

class StorageItemMergeView(FormView):
# ...

def form_valid(self, form):
    si = StorageItem.objects.get(pk=self.kwargs["pk"])
    si.part.merge_storage_items(si, StorageItem.objects.get(
                                  pk=self.request.POST["storageitem1"]
                                  )
                               )
    return super(StorageItemMergeView, self).form_valid(form)

此表格非常简单:

class MergeStorageItemsForm(forms.Form):
    storageitem1 = forms.ModelChoiceField(queryset=StorageItem.objects.all())

事实上,用户可能会填写在 merge_storage_items() 调用时失败的语法正确数据。

在我的例子中,merge_storage_items() 能够 return 是或否——但是如何在方法调用失败的情况下做出正确反应?

正确的方法是在form_valid中完全不做。这不是它的目的。该方法称为表单已验证并负责保存和重定向的方法。

执行此操作的正确位置是在表单 class 本身中,您可以在其中覆盖 clean 方法并在检查失败时引发 forms.ValidationError