我需要在模型的保存方法中引发异常。我希望有一个例外,它会被任何django ModelForm
所使用,它会使用这个模型,包括管理表单。从django模型的保存方法中引发ValidationError?
我试着提高django.forms.ValidationError
,但是这似乎没有被管理员窗体捕获。该模型会在保存时进行远程过程调用,直到此调用才知道输入是否有效。
谢谢,皮特
我需要在模型的保存方法中引发异常。我希望有一个例外,它会被任何django ModelForm
所使用,它会使用这个模型,包括管理表单。从django模型的保存方法中引发ValidationError?
我试着提高django.forms.ValidationError
,但是这似乎没有被管理员窗体捕获。该模型会在保存时进行远程过程调用,直到此调用才知道输入是否有效。
谢谢,皮特
目前还没有任何模型执行验证保存方法的方式。然而,这是作为一个单独的模型验证分支正在开发的,并且应该在未来几个月内合并到主干中。
与此同时,您需要在表单级别进行验证。使用clean()
方法创建ModelForm
子类很简单,该方法可以进行远程调用,并相应地引发异常,并将其用于管理员和作为其他表单的基础。
由于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)
这有内外和管理的工作之外的利益。
django最近一直在呕吐我。我采用这种方法,但我不满意。修改模型的代码不属于干净的方法。 – slypete 2009-09-24 21:44:11
刚刚入住,你谈过这个分支了吗? – rennat 2009-11-25 04:32:41
它是Django 1.2的一部分:http://docs.djangoproject.com/en/dev/ref/models/instances/#validating-objects – Tom 2010-11-04 18:47:41