如何在Django中包含相关列而不包括所有列

时间:2017-03-15 18:43:55

标签: python django

Django的ORM有一个名为select_related()的方法,用于连接相关的表。

但是,如果包含的字段是另一个模型的外键,则默认行为似乎是包含相关模型中的所有列。

例如,如果我有模型:

class A(models.Model):
    field1 = models.CharField(...)
    field2 = models.CharField(...)

class B(models.Model):
    field1 = models.CharField(...)
    field2 = models.ForeignKey(A)

print str(B.objects.all().select_related('field2').query))

输出:

SELECT myapp_b.id, myapp_b.field1, myapp_b.field2_id, myapp_a.id, myapp_a.field1, myapp_a.field2 FROM ...

但我只想包含A.field1,而不是A中的所有字段,所以我尝试过:

print str(B.objects.all().select_related('b__field1').query))

但输出完全相同的查询。

如何阻止Django包含select_related()中列出的外键字段中的所有字段?

1 个答案:

答案 0 :(得分:2)

您可以使用only(),但是您必须在B对象中包含所需的所有字段:

B.objects.all().select_related('field2').only('field1', 'field2__field1')