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
。
在自定义 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
。