Skip to main content
 首页 » 编程设计

python之Django ORM,通过模型继承按类型过滤对象

2025年05月04日7小虾米

所以我有两个模型...

parent 和 child 。

子级扩展父级。

当我这样做

Parent.objects.all(),我得到了 parent 和 child 。

我只想要 parent

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

请您参考如下方法:

我找到了一个更好的方法来解决这个问题,使用 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) 

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

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" IS NULL