【问题标题】:Django: How to handle error at custom form_valid() correctlyDjango:如何正确处理自定义 form_valid() 的错误
【发布时间】:2015-02-19 17:15:10
【问题描述】:

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

例如我有一个定义了这个 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 ——但是在方法调用失败的情况下如何正确反应?

【问题讨论】:

    标签: python django error-handling django-forms


    【解决方案1】:

    正确的方法是根本不在 form_valid 中进行。那不是它的用途。该方法在表单已经过验证并负责保存和重定向时调用。

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

    【讨论】:

    • 实际上在我的情况下,输入的主要验证是正确的。但是想知道如果基于有效输入的 $action 失败了如何反应
    • 实际上在玩过之后它似乎是一个很好的提示。在我的案例中,逻辑现在在模型级别完成,并且正在引发异常。
    猜你喜欢
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 2018-04-07
    • 2019-07-06
    • 1970-01-01
    • 2021-09-22
    • 2019-11-17
    • 2012-12-28
    相关资源
    最近更新 更多