在子类类型上过滤 django QuerySet(多 table 继承)?

Filter django QuerySet on subclassed type (multi-table inheritance)?

我正在寻找一种高效的模型管理器方法,该方法使用以下 class 结构来生成 QuerySet,如下所述:

#models.py
from django.db import models

class SuperModel(models.Model):
    date_of_interest = models.DateField(...)
    # <other model_fields>

class SubA(SuperModel):
    # <other model_fields>

class SubB(SuperModel):
    # <other model_fields>

class SubC(SuperModel):
    # <other model_fields>

#somewhere else (eg. views.py)
...    
query_set = SuperModel.objects.filter(date_of_interest=today)
qs_to_list = [e for e in query_set if hasattr(e, 'subb') or hasattr(e, 'subc')]

我想保留 qs_to_list 一个 QuerySet,所以我正在寻找一种基于子类型的模型管理器方法进行过滤的方法class . 如前所述,我将多表继承与 abstract=False 一起使用,并隐式使用通过此类继承创建的 OneToOneField

谢谢!

您可以过滤:

from django.db.models import Q

SuperModel.objects.filter(
    <b>Q(subb__isnull=False) | Q(subc__isnull=False)</b>,
    date_of_interest=today
)<b>.distinct()</b>

因此,这将在 SubBSubC 模型上生成 LEFT OUTER JOINs,并且如果存在与此 JOINing 相关的记录,则 SubB and/orSubC不是NULL,我们知道它是SubBSubC.

类型