用于在 Django 中编写可靠数据不变量的库。
项目描述
Django 查询集约束
通过将 Django 查询集编译为数据库插入/更新触发器,该库使人们能够编写可靠的数据不变量。迁移系统。
动机
Django 有一个内置的信号系统,它在各种事件上发出信号,例如模型创建、更新和删除。然而,这些信号不会用于查询集操作,因此不能用于维护数据不变量。
使用Django Queryset Signals库尝试批准这一点。虽然这个库更接近于一个可靠的解决方案,但它并没有成功,因为仍然可以通过直接访问数据库来破坏数据不变量。
数据库约束触发器将有效地防止所有情况。
安装
pip install django_queryset_constraint
用法
- 将
django_queryset_constraint
应用程序添加到INSTALLED_APPS
:
# settings.py
INSTALLED_APPS = {
'django_queryset_constraint',
...
}
注意:这应该在任何将被检查的应用程序之前完成
- 添加
QuerysetConstraint
到constraints
要检查的模型的 Meta 类中:
# models.py
from django.db import models
from django.db.models import Count
from django_queryset_constraint import M, QuerysetConstraint
class Topping(models.Model):
name = models.CharField(max_length=30)
class PizzaTopping(models.Model):
class Meta:
unique_together = ("pizza", "topping")
constraints = [
# A pizza with more than 5 toppings gets soggy
QuerysetConstraint(
name='At most 5 toppings',
queryset=M().objects.values(
'pizza'
).annotate(
num_toppings=Count('topping')
).filter(
num_toppings__gt=5
),
),
# This constraint should be self-explanatory for civilized people
QuerysetConstraint(
name='No pineapple',
queryset=M().objects.filter(
topping__name="Pineapple"
)
),
]
pizza = models.ForeignKey('Pizza', on_delete=models.CASCADE)
topping = models.ForeignKey(Topping, on_delete=models.CASCADE)
class Pizza(models.Model):
name = models.CharField(max_length=30)
toppings = models.ManyToManyField(Topping, through=PizzaTopping)
- 进行迁移:
python manage.py makemigrations
- 运行迁移:
python manage.py migrate
注意:复杂的触发器会引入性能开销。
支持矩阵
此应用程序支持以下 Django 和 Python 组合:
姜戈 | Python |
---|---|
2.2 | 3.6、3.7 |
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
django_queryset_constraint-1.0.6.tar.gz
(14.3 kB
查看哈希)
关
django_queryset_constraint -1.0.6.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3f21a6892890f25396941043096b1bb1a8b0d592aa36789587fb5df1613336a7 |
|
MD5 | df573f69d3d170b333a07e93bdd9fec6 |
|
布莱克2-256 | fc9f56b1cc28a687b3f416b1c10c669fa8e859385a93de5b9dcebe94c403e8a2 |