【发布时间】:2019-06-11 22:06:09
【问题描述】:
有没有办法全局过滤 Django 模型?我们需要在一个地方设置一个过滤器,以便将其应用于 Django ORM 生成的所有查询,包括相关对象查找等。示例:
class A(Model):
n = IntegerField()
class B(Model):
a = ForeignKey(A)
我们想在 A 上设置一个全局过滤器 id__gte=10(为了简单起见是静态的)。然后在进行相关查询时也必须自动应用过滤器,例如
B.objects.filter(a__n=123) # this code cannot be modified
应该以某种方式神奇地扩展为相当于
B.objects.filter(a__n=123, a__id__gte=10)
我们可以更改模型、管理器、查询集,但我们无法更改实际查询对象的代码(大量代码、第三方应用程序、通用 API)。
【问题讨论】:
-
假设您查询
A.objects.all(),您想过滤As 且id也小于10? -
是的,无处不在。
-
如果你想让它真正全球化......有一个超级简单的方法:
A.objects.filter(id__lt=10).delete() -
我要过滤,不要删除。
标签: python django filter global