是否可以全局过滤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)。
答案 0 :(得分:0)
如何在带有过滤器的数据库中创建视图并创建指向该视图的Django模型?
答案 1 :(得分:0)
您应该创建一个自定义管理器并修改一个初始QuerySet
。检出the docs。
# First, define the Manager subclass. class DahlBookManager(models.Manager): def get_queryset(self): return super().get_queryset().filter(author='Roald Dahl') # Then hook it into the Book model explicitly. class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=50) objects = models.Manager() # The default manager. dahl_objects = DahlBookManager() # The Dahl-specific manager.
然后,您应该使用自定义管理器(dahl_objects
)而不是objects
,所有查询都会被修改。
或者您可以覆盖objects
经理本身
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
objects = DahlBookManager() # The Dahl-specific manager