Django在单个查询中选择继承的模型

时间:2017-07-03 14:06:19

标签: django django-models

假设我有一个父表和子表,它们是通过django中的继承实现的。

models.py

class A(models.Model)
 a = CharField()

class B(A):
 b = CharField()

现在我想从表b中选择列B我执行:

B.objects.only('b').get(id=4)

但是这个语句2次查询数据库:

SELECT `b`.`a_ptr_id`, `b`.`b` FROM `b` WHERE `b`.`a_ptr_id` = 4; args=(4,)
SELECT `a`.`a`, `b`.`a_id` FROM `b` INNER JOIN `a` ON (`b`.`a_ptr_id` = `b`.`id`) WHERE `b`.`a_ptr_id` = 4; args=(4,)

如何使用django模型生成select b from b where a_ptr_id = ?之类的单一查询?

我想一次查询数据库!

1 个答案:

答案 0 :(得分:1)

事实证明,只生成了1个查询。第二个查询是因为我在调试模式下检查了所有这些。我的IDE自动评估了对象,导致使用

查询数据库
SELECT `a`.`a`, `b`.`a_id` FROM `b` INNER JOIN `a` ON (`b`.`a_ptr_id` = `b`.`id`) WHERE `b`.`a_ptr_id` = 4;