django-polymorphic按子类型过滤

时间:2014-03-26 23:58:54

标签: django polymorphism django-polymorphic

我的模型结构如下:

class MyObject(PolymorphicModel):
    group = models.ForeignKey(Group)

class Group(PolymorphicModel):
    pass

class SpecialGroup(Group):
    pass

现在,我想选择所有MyObjects,哪个组是SpecialGroup类型。

是否可以使用QuerySet API实现它,而无需运行原始SQL? 我提出的唯一可行解决方案是使用.extra()运行额外的“select”SQL查询。

提前致谢, 干杯!

1 个答案:

答案 0 :(得分:7)

在内部,django_polymorphic使用Django的ContentType框架来确定每个模型使用的实际类。

from django.contrib.contenttypes.models import ContentType

MyObject.objects.filter(group__polymorphic_ctype=ContentType.objects.get_for_model(SpecialGroup))