我有一个预订模型,需要检查预订的商品是否可用。我希望有一个逻辑来确定该项目是否可用集中,这样无论我在哪里保存实例,此代码都会验证它是否可以保存。
目前,我的模型类的自定义保存函数中有此代码:
def save(self):
if self.is_available(): # my custom check availability function
super(MyObj, self).save()
else:
# this is the bit I'm stuck with..
raise forms.ValidationError('Item already booked for those dates')
这工作正常 - 如果该项目不可用,并且我的项目未保存,则会引发错误。我可以从前端表单代码捕获异常,但是 Django 管理站点呢?如何让我的异常像管理站点中的任何其他验证错误一样显示?
在 django 1.2 中,添加了模型验证。
现在,您可以向模型添加一个“clean”方法,该方法会引发 ValidationError 异常,并且在使用 django admin 时会自动调用该方法。
The clean()
使用 django admin 时会调用该方法,但是NOT拜访save()
.
如果您需要使用clean()
管理之外的方法,您需要显式调用clean()
你自己。
http://docs.djangoproject.com/en/dev/ref/models/instances/?from=olddocs#validating-objects http://docs.djangoproject.com/en/dev/ref/models/instances/?from=olddocs#validating-objects
所以你的干净方法可能是这样的:
from django.core.exceptions import ValidationError
class MyModel(models.Model):
def is_available(self):
#do check here
return result
def clean(self):
if not self.is_available():
raise ValidationError('Item already booked for those dates')
我没有广泛使用它,但看起来比创建 ModelForm,然后在 admin.py 文件中链接该表单以便在 django admin 中使用要少得多的代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)