Django全球金融机构

2024-09-30 06:30:09 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法对Django模型进行全局过滤?我们需要在一个地方设置一个过滤器,这样它就可以应用到Django ORM生成的所有查询中,包括相关的对象查找等。例如:

class A(Model):
    n = IntegerField()

class B(Model):
    a = ForeignKey(A)

我们想设置一个全局过滤器id_ugte=10(静态以使其更简单)。在进行相关查询时,也必须自动应用过滤器,例如

^{pr2}$

以某种方式神奇地扩展到

B.objects.filter(a__n=123, a__id__gte=10)

我们可以更改模型、管理器、查询集,但不能更改实际查询对象的代码(大量代码、第三方应用程序、通用API)。在


Tags: 对象django代码模型id过滤器model地方
2条回答

您应该创建一个自定义管理器并修改初始的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

用过滤器在数据库中创建一个视图,然后创建一个指向该视图的Django模型呢?在

相关问题 更多 >

    热门问题