django - 在 Django 管理站点中显示自定义模型验证异常

标签 django django-admin

我有一个预订模型,需要检查被预订的元素是否可用。我想让背后的逻辑确定该项目是否集中可用,以便无论我在哪里保存实例,此代码都会验证它是否可以保存。

目前,我在我的模型类的自定义保存函数中有此代码:

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 中,添加了模型验证。
您现在可以向引发 ValidationError 异常的模型添加一个“clean”方法,并且在使用 django admin 时会自动调用它。clean()方法在使用 django admin 时被调用,但未在 save() 上调用.

If you need to use the clean() method outside of the admin, you will need to explicitly call clean() yourself.


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 中使用。

关于django - 在 Django 管理站点中显示自定义模型验证异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2177720/

相关文章:

python - 如何与 Django 一起设置连续运行的进程?

Django 的 ModelForm unique_together 验证

Django 的管理页面缺少典型的格式/样式,我设置错了吗?

python - Django 1.7 - 更新 base_site.html 不工作

python - 在管理中预填充 django 水平过滤器

Django:创建类似于管理界面的内联表单集

python - 如何从 Django 中的不同模型生成 feed?

python - 使用 python-social-auth 登录 facebook 时遇到错误

django - 如何在 django rest 框架中传递用户 token 进行 API 测试?

Django 表单,在 Meta 类中有多个 "Models"?