在django模型的保存方法中引发ValidationError?
我需要在一个模型的保存方法中引发一个异常。我希望这个异常能被任何使用这个模型的django ModelForm
捕获,包括后台管理表单。
我试着引发 django.forms.ValidationError
,但后台管理表单似乎没有捕获到这个异常。这个模型在保存时会进行一次远程过程调用,而在这个调用之前并不知道输入是否有效。
谢谢,Pete
2 个回答
15
自从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)
这样做的好处是,它在管理后台和其他地方都能正常工作。
9
目前在模型保存方法中没有办法进行验证。不过,正在开发一个单独的模型验证功能,预计在接下来的几个月里会合并到主版本中。
在这段时间里,你需要在表单层面进行验证。创建一个 ModelForm
的子类并添加一个 clean()
方法是很简单的,这个方法可以进行远程调用并根据情况抛出异常。你可以在后台管理和其他表单中都使用这个方法。