Django ORM,按类型过滤对象,具有模型继承

M. *_*yan 1 python django django-models

所以我有两个型号......

父母和孩子.

孩子延伸父母.

当我做

Parent.objects.all(),我得到了父母和孩子.

我只想要父母

是否有一个Parent.objects.filter()参数我可以用来获取父对象而不是扩展父对象的对象?

log*_*ion 13

我找到了一种更好的解决方法,使用django ORM并且无需对模型进行任何更改(例如ABC):

class Parent(models.Model):
    field1 = models.IntegerField()
    field2 = models.IntegerField()

class Child(Parent):
    field3 = models.IntegerField()

#Return all Parent objects that aren't also Child objects:
Parent.objects.filter(child=None)
Run Code Online (Sandbox Code Playgroud)

这将导致以下查询(概念,实际查询可能会有所不同):

SELECT"ap_parent"."field1","ap_parent"."field2"FROM"ap_parent"INNER JOIN"ap_child"ON("parent"."parent_ptr_id"="ap_child"."parent_ptr_id")WHERE"ap_child"."parent_ptr_id " 一片空白