如何查询继承模型Django?

2024-09-19 20:45:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有模型

class Parent(Model):
    pass

class Child1(Parent):
    att1 = CharField()

class Child2(Parent):
    att2 = CharField()

class Final(Model):
    parent = ForeignKey('Parent', related_name="final")

我需要询问一下

Final.objects.filter(parent__att1='abc')

但是只有Child1继承Parent具有att1。如何在Child1中查询att1,而不是Child2


Tags: name模型modelpassclassparentfinalcharfield
1条回答
网友
1楼 · 发布于 2024-09-19 20:45:46

您可以使用以下工具进行查询:

Final.objects.filter(parent__child1__att1='abc')

在Django中,(非抽象模型的)继承是通过在子模型中添加隐式OneToOneField来实现的。因此,我们可以通过在反向中查询来使用该关系

因此,这将创建一个如下所示的查询:

SELECT final.*
FROM final
INNER JOIN parent ON final.parent_id = parent.id
INNER JOIN child1 ON parent.id = child1.parent_ptr_id
WHERE child1.att1 = 'abc'

相关问题 更多 >