2017-03-15 22 views
0

Django的ORM有一個名爲select_related()的方法用於加入相關表。如何在不包含所有列的情況下在Django中包含相關列

但是,如果包含的字段是另一個模型的外鍵,則默認行爲似乎是在相關模型中包含所有列。

舉例來說,如果我有型號:

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

回答

2

您可以使用only(),但你必須包括所有你從B對象所需的字段:

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

我試過類似的東西,而是因爲我用的是滿場的名字得到一個錯誤每一個。訣竅是確保兩組字段名稱不重疊。 – Cerin

相關問題