在自定义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 - 但是如果方法调用失败,如何正确反应?
答案 0 :(得分:1)
正确的方法是不要在form_valid中执行此操作。这不是它的用途。该方法称为表单已经过验证,负责保存和重定向。
执行此操作的正确位置在表单类本身中,如果检查失败,您将覆盖clean
方法并引发forms.ValidationError
。