【问题标题】:How to include related columns in Django without including all columns如何在 Django 中包含相关列而不包含所有列
【发布时间】:2017-03-15 18:43:55
【问题描述】:

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() 中列出的外键字段中的所有字段?

【问题讨论】:

    标签: python django


    【解决方案1】:

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

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

    【讨论】:

    • 我曾尝试过类似的方法,但由于我在每个中都使用了完整的字段名称,所以遇到了错误。诀窍是确保两组字段名称不重叠。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 2014-11-02
    • 2021-02-13
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    相关资源
    最近更新 更多