主要作者
- @卫斯肯德尔
Postgres触发器支持与Django模型集成。
django-pgtrigger提供用于配置的原语 Postgres triggers 在Django模型上。在
触发器可以解决 各种各样的数据库级问题更加优雅可靠 而不是Django的应用程序级别。这里有一些常见的 可以用触发器解决的问题,其中许多问题我们稍后将演示如何 在文档中求解:
用pip install django-pgtrigger和pip install django-pgtrigger安装django-pgtrigger 将pgtrigger添加到settings.INSTALLED_APPS。在
模型用@pgtrigger.register装饰并提供 pgtrigger.Trigger对象。如果您无法访问模型定义, 您仍然可以通过编程方式调用pgtrigger.register。在
用户手动声明plpgsql代码 在pgtrigger.Trigger对象中,或可以在中使用派生触发器 django-pgtrigger,实现常见方案。例如, pgtrigger.Protect可以保护模型上的操作,例如删除:
fromdjango.dbimportmodelsimportpgtrigger@pgtrigger.register(pgtrigger.Protect(operation=pgtrigger.Delete))classCannotBeDeletedModel(models.Model):"""This model cannot be deleted!"""
django-pgtrigger旨在减轻触发器和 必须使用常见的Django习惯用法编写原始SQL。例如,用户 可以使用pgtrigger.Q和pgtrigger.F对象来 基于OLD和NEW行有条件地执行触发器 正在修改。例如,我们只保护删除 相对于模型的“活动”行:
^{pr2}$组合使用pgtrigger.Q,pgtrigger.F,和派生的pgtrigger.Trigger 对象可以解决大量的Django问题,而不必这样做 编写原始SQL。但是,用户仍然可以自定义 触发器,并为它们的用例编写尽可能多的原始SQL。在
完成django-pgtrigger和所有派生的 触发器(连同触发器食谱!),阅读 pgtrigger docs。文件 有一个完整的教程如何配置触发器和大量的代码示例。在
在你经历了 文档中的教程,请查看 https://wesleykendall.github.io/django-pgtrigger-tutorial/,哪个 是为Django meetup谈话编写的交互式教程吗 django-pgtrigger。在
安装django pgtrigger:
pip3 install django-pgtrigger
在此之后,将pgtrigger添加到INSTALLED_APPS 你的Django项目的设置。在
有关为开发和 正在参与更改,请查看CONTRIBUTING.rst。在
标签: