为解决Django的并集、交集和差分操作的一些缺点而设计的库。
django-delayed-union的Python项目详细描述
django-delayed-union库的设计目的是解决一些 django's并、交和差的缺点 操作。尤其是,一旦执行了其中一个操作, QuerySet上的某些方法将不起作用:
>>> qs = User.objects.filter(id=1) >>> unioned_qs = qs.union(qs) >>> should_be_empty_qs = unioned_qs.exclude(id=1) >>> user, = list(should_be_empty_qs); user.id 1
为了解决这个问题,django-delayed-union提供 一组槲寄生的包装纸。这些包装器实现了 类似于QuerySet的接口,延迟执行联合, 交叉或差分运算,直到需要为止:
>>> from django_delayed_union import DelayedUnionQuerySet >>> qs = User.objects.filter(id=1) >>> unioned_qs = DelayedUnionQuerySet(qs, qs) >>> empty_qs = unioned_qs.exclude(id=1) >>> list(empty_qs) []
通常返回新的QuerySet的操作 返回一个新的DelayedQuerySet,操作应用于 查询集。
这段代码的一个有用之处是 mysql query planner为 视图的查询集 使用了OR条件。通过使用DelayedUnionQuerySet, 子类可以在 仍然保持高效的查询计划。
- 自由软件:BSD 3条款许可证
安装
pip install django-delayed-union
开发
要运行所有测试,请运行:
tox
更改日志
0.1.2(2018-12-14)
- 增加了对嵌套联合和交叉口的支持
0.1.1(2018-07-16)
- 缓存了应用延迟操作后生成的QuerySet。
0.1.0(2018-03-14)
- pypi上的第一个版本。