0

我在我的模型中用 clean 方法编写了一些验证,如下所示:

class MyModel(models.Model):
    foo = ....
    bar = ...

    def clean(self):
        (logic that should be applied to all instances of MyModels to validate)

我想使用这个逻辑(而不是 ModelForm.clean)来验证 MyModel 的模型表单。我希望它看起来像:

def my_view(request):

    ...

    if request.method == 'POST':
    form = MyModelForm(request.POST)
    try:
        # validate
        form.instance.clean()
        form.instance.save()
    except ValidationError as e:
        validation_error = e # ???

但这不起作用。我想这样做的两个原因是

  1. 我希望将验证应用于所有 MyModel,所以这似乎是最干燥的方法。
  2. 我想向用户显示模型 ValidationError 的文本。

我环顾四周,没有找到任何关于如何以这种方式进行验证的示例或解释。有没有更好的方法可以让我忽略?

4

2 回答 2

1

你不能像那样捕获 ValidationErrors。所有 ValidationErrors 都收集在 form.errors 中的字典中。

if request.method == "POST":
    form = MyModelForm(request.POST)
        if form.is_valid():
            form.save()
        else:
            validation_errors = form.errors
于 2013-09-10T06:05:36.017 回答
1

您不必显式调用您的Model验证。从文档中:

就像正常的表单验证一样,模型表单验证在调用 is_valid() 或访问 errors 属性时被隐式触发......模型验证......从表单验证步骤中触发。

因此,只需以常规方式验证您的表单(请参阅文档或 Jay 的回答)。

于 2013-09-10T06:44:38.243 回答