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

时间:2015-02-19 17:15:11

标签: python django error-handling django-forms

在自定义form_valid()函数中处理错误的“正确”方法是什么?

E.g。我有一个定义了这个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()能够返回True或False - 但是如果方法调用失败,如何正确反应?

1 个答案:

答案 0 :(得分:1)

正确的方法是不要在form_valid中执行此操作。这不是它的用途。该方法称为表单已经过验证,负责保存和重定向。

执行此操作的正确位置在表单类本身中,如果检查失败,您将覆盖clean方法并引发forms.ValidationError