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

2024-07-03

我有一个预订模型,需要检查预订的商品是否可用。我希望有一个逻辑来确定该项目是否可用集中,这样无论我在哪里保存实例,此代码都会验证它是否可以保存。

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

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(使用前将#替换为@)

在 Django 管理站点中显示自定义模型验证异常 的相关文章

随机推荐

  • 从应用程序内发送的短信似乎无法检测到?

    我刚刚创建了一个很酷的应用程序 可以与短信一起使用 我想对我的用户说 别担心 我的应用程序会发送短信 但您可以在您最喜欢的短信应用程序中跟踪它们 我不想让他们担心我会超载他们的月费 所以 我发送短信的方式很简单 SmsManager sms
  • NumPy ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

    我正在 NumPy 中计算矩阵的特征向量和特征值 只是想通过assert陈述 这会引发一个我不太理解的 ValueError 因为打印这些比较效果很好 有什么建议我可以得到这个assert声明有效吗 import numpy as np A
  • httplib2 支持 http 代理吗? Socks 代理可以工作,但 http 不行

    这是我的代码 我无法让任何 http 代理工作 不过 袜子代理 socks4 5 工作正常 有什么想法吗 不过 urllib2 与代理一起工作得很好 我很困惑 谢谢 Code 1 import socks 2 import httplib2
  • 如何从动态命名范围中进行 OFFSET 并在 SUMPRODUCT 中使用该范围?

    情况 我正进入 状态 Value 当试图通过OFFSET动态命名范围的SUMPRODUCT Setup 我在 Sheet1 的 A2 B4 范围内有以下数据 TextA 1 TextA 2 TextB 3 我创建了一个动态命名范围 text
  • 如何获取音频JS的位深度/采样率?

    我需要获取由标准输入元素加载的音频文件的采样率 我尝试使用这个功能 function func e let reader new FileReader reader readAsArrayBuffer e files 0 reader on
  • 永久更改节点调用堆栈大小

    我想增加 stack sizeNodejs 系统范围的选项 我知道我可以在每次调用的基础上执行此操作 如下所示 node stack size 10000
  • 将字符移动到字符串中会使迭代器失效吗?

    所以迭代一个字符串并使用operator 或插入更改字符会使迭代器无效 像这样的迭代也是如此吗 std string str ABCD for auto c str for int i 0 i lt 3 i switch c case A
  • 从 OpenFileDialog 路径/文件名中提取路径

    我正在编写一个小实用程序 首先选择一个文件 然后我需要选择一个文件夹 我想将文件夹默认为所选文件所在的位置 OpenFileDialog FileName返回完整路径和文件名 我想要的是获得路径部分 无文件名 所以我可以用它作为初始选定的文
  • 在 docker 容器中针对 Localstack 运行 shell 脚本

    我一直在使用 localstack 开发本地服务 我刚刚通过运行他们的 docker 镜像docker run rm p 4567 4583 4567 4583 p 8080 8080 localstack localstack 然后我手动
  • 数据库异常 - 一般错误:1021 磁盘已满

    谁能帮我理解为什么这个查询说光盘已满 数据库异常 SQLSTATE HY000 一般错误 1021 磁盘已满 tmp sql 1445 3 MAI 等待有人释放一些空间 错误号 28 设备上没有剩余空间 Query 这是服务器问题 只有楼主
  • 覆盖 jQuery 函数

    有没有办法覆盖 jQuery 的核心功能 假设我想添加一个警报 this length 大小为 function 而不是将其添加到源中 size function alert this length return this length 我
  • 命名 GCP 项目的建议[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在构建一个移动约会应用程序 并计划利用谷歌的云基础设施 我试图弄清楚整个应用程序是否应该存在于单个 GCP 项目中 在阅读最佳实践文档 ht
  • 如果进程中的一个线程崩溃会发生什么?

    我有两个菜鸟问题 1 为什么node js在单线程中运行 为什么不直接使用进程本身呢 或者在线程中而不是在进程中运行它有什么优点 2 如果进程中的线程崩溃会发生什么 我知道 未处理的异常将导致进程退出 但是如果正确捕获它会发生什么 或者像浮
  • 除非我在其中放入 printf 语句,否则代码会崩溃

    这是我正在使用的数组库中的代码片段 这在 Windows 上运行良好 但是当我在 Linux 上使用 gcc 编译时 如果此函数崩溃 当试图缩小问题范围时 我向其中添加了一条 printf 语句 代码不再崩溃 void arrayCreat
  • ConstraintLayout 视图位于左上角

    每次我创建这样的视图时Button and TextView in ConstraintLayout 它们都卡在顶角而不是我放置它们的位置 我尝试创建新的活动并更改模拟器 但结果仍然相同 这是正在发生的事情的屏幕截图 可能是什么问题 如中所
  • Mongotemplate.updateFirst() 不更新@LastModifiedDate

    我正在使用基于注释的配置 Configuration Profile default ComponentScan basePackages com EnableMongoRepositories EnableMongoAuditing pu
  • 创建SparkContext失败

    我正在用 scala 代码在 Spark shell 中测试 Spark 我正在构建使用 Kafka 和 Spark 的原型 我跑了spark shell像下面这样 spark shell jars spark external kafka
  • Microsoft Teams 身份验证:无法在团队机器人 (V4 SDK) 中检索令牌

    我有一个微软团队机器人我正在尝试使用以下方式对用户进行身份验证AAD v2 端点 该机器人使用V4 SDK 和 OauthPrompt 我可以登录但无法获取令牌 我正在使用 OAuth 卡 该卡正在 Teams 内渲染 单击登录按钮后 它将
  • 如何将 SQL Server 存储过程的返回值获取到 nHibernate 中?

    1 数据库平台 SqlServer 2 数据访问 nHibernate 1 2 现在我们需要通过 nHibernate 访问存储过程 如下所示 ALTER PROCEDURE TestProc AS BEGIN Select From Us
  • 在 Django 管理站点中显示自定义模型验证异常

    我有一个预订模型 需要检查预订的商品是否可用 我希望有一个逻辑来确定该项目是否可用集中 这样无论我在哪里保存实例 此代码都会验证它是否可以保存 目前 我的模型类的自定义保存函数中有此代码 def save self if self is a