djangopolymorphismdjango-polymorphic

django-polymorphic Filter by child type


I have models structure like below:

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

class Group(PolymorphicModel):
    pass

class SpecialGroup(Group):
    pass

Now, I would like to select all MyObjects, which group is of type SpecialGroup.

Is it possible to achieve it with QuerySet API, without running raw SQL? The only working solution I came up with was by running additional 'select' SQL query using .extra().

Thanks in advance, Cheers!


Solution

  • Internally, django_polymorphic uses Django's ContentType framework to determine the actual class used for each model.

    from django.contrib.contenttypes.models import ContentType
    
    MyObject.objects.filter(group__polymorphic_ctype=ContentType.objects.get_for_model(SpecialGroup))