从django模型的save方法中提出ValidationError?

时间:2009-09-24 20:13:16

标签: python django

我需要在模型的save方法中引发异常。我希望存在一个异常,任何使用此模型的django ModelForm都会捕获该异常,包括管理表单。

我尝试提升django.forms.ValidationError,但管理员表单似乎没有注意到这一点。该模型在保存时进行远程过程调用,如果输入有效,则在此调用之前不知道。

谢谢,皮特

2 个答案:

答案 0 :(得分:10)

自Django 1.2以来,这就是我一直在做的事情:

class MyModel(models.Model):

    <...model fields...>

    def clean(self, *args, **kwargs):
        if <some constraint not met>:
            raise ValidationError('You have not met a constraint!')
        super(MyModel, self).clean(*args, **kwargs)

    def full_clean(self, *args, **kwargs):
        return self.clean(*args, **kwargs)

    def save(self, *args, **kwargs):
        self.full_clean()
        super(MyModel, self).save(*args, **kwargs)

这有利于在管理员内外工作。

答案 1 :(得分:8)

目前无法在模型保存方法中执行验证。然而,这是作为一个单独的模型验证分支开发的,并且应该在未来几个月内合并到主干中。

与此同时,您需要在表单级别进行验证。使用ModelForm方法创建clean()子类非常简单,该方法可以进行远程调用并相应地引发异常,并在管理中使用它,并将其作为其他表单的基础。