python - 如何修复,PostgreSQL BEFORE UPDATE 触发从 Django 端在与触发器无关的列上执行的选定列?
问题描述
基本上,我正在使用 PostgreSQL 数据库创建一个 Django 应用程序,现在对于数据库上的给定表,我必须使用触发器来防止更新选定列,触发器在数据库端正常工作,做它要做的事情,防止更新选定列并允许使用触发器更新非关联列。
现在从 Django 方面来看,每当我尝试更新与触发器无关的表的字段/列时,它都会调用/执行触发器,以防止对那些不关联的字段/列进行更新操作,并且在尝试时甚至会执行此触发器从 Django 端添加新记录或数据以防止插入新记录。
有人可以帮忙吗?
谢谢
解决方案
我找到了解决我的问题的方法。
我创建了一个 PostgreSQL 触发器来防止更新一些列。从数据库方面,我对其进行了测试,并且工作正常。问题出在 Django 方面。
在数据库中,可以通过输入一个值来更新单个列,它与其他列没有联系,因此更新特定列不会出错。例如,一行有两个字段,一个可修改,另一个被触发器阻止,因此当我修改该可修改字段时,它将被修改。
Django 的问题,在 Django 中,它总是会写出整个对象。例如,如果您有一个具有两个字段的对象,一个可修改,另一个不可修改,但两者都在 Django 中映射,当您保存该对象时,Django 将更新这两个字段,即使它们中只有一个或没有一个已更改。
当 Django 更新所有字段时,即使只更改了一个字段,触发器也会被调用。
所以我不得不寻找一个选项,它只允许更新指定的字段或更改/修改的字段,而不是其他未更改的字段。
我发现这个 update_fields,
update_fields 帮助我确定应该更新哪些字段,而不是更新整行或所有字段。
推荐阅读
- html - 宽度网页没有填满屏幕
- string - cython - 从 numpy 数组操作字符串
- angular - Angular 6 - ngModel 的值仅在单击某处时出现
- haskell - 为什么 Haskell 有底部(无限递归)?
- asp.net-core - .netCore Web 应用程序在包含 nuget 后在 startup.cs 中的 UseWebpackDevMiddleware 处引发异常
- mongodb - Mongo - 如何在单个查询中更新具有不同值的多个文档?
- c++ - 取 boost::hana::partial::operator() 的地址
- react-native - 在“连接”的上下文或道具中找不到“商店”
- python - 使用 python 的 Ipyleaflet 问题(不显示任何地图)
- javascript - 我如何为这个幻灯片制作动画(通过更改它的 src)?