将模型验证应用于ModelForm的方法?

时间:2013-09-10 03:57:59

标签: django django-models django-forms

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

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的文本。
  3. 我已经四处寻找并且没有找到任何关于如何以这种方式进行验证的示例或解释。我有一个更好的方式可以忽略吗?

2 个答案:

答案 0 :(得分:1)

您无法捕获这样的ValidationErrors。所有ValidationErrors都在form.errors中的dict中收集。

if request.method == "POST":
    form = MyModelForm(request.POST)
        if form.is_valid():
            form.save()
        else:
            validation_errors = form.errors

答案 1 :(得分:1)

您不必明确调用Model验证。来自documentation

  

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

所以只需要定期验证您的表单(请参阅documentation或Jay的回答)。