我需要在模型的save方法中引发异常.我希望存在一个异常,任何ModelForm使用此模型的django都会捕获该异常,包括管理表单.
我试着提高django.forms.ValidationError,但管理员表格似乎没有注意到这一点.该模型在保存时进行远程过程调用,如果输入有效,则在此调用之前不知道.
谢谢,皮特
Cer*_*rin 11
从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)
Run Code Online (Sandbox Code Playgroud)
这有利于在管理员内部和外部工作.
目前无法在模型保存方法中执行验证.然而,这是作为单独的模型验证分支开发的,并且应该在接下来的几个月内合并到主干中.
与此同时,您需要在表单级别进行验证.创建一个ModelForm带有clean()远程调用方法的子类并相应地引发异常非常简单,并在管理中使用它,并将其作为其他表单的基础.