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()
中列出的外键字段中的所有字段?
答案 0 :(得分:2)
您可以使用only()
,但是您必须在B对象中包含所需的所有字段:
B.objects.all().select_related('field2').only('field1', 'field2__field1')