簡體   English   中英

在Django上使用select_related進行過濾

[英]filter with select_related on Django

我在過濾器操作中使用Django的select_related功能時遇到問題,這是我的問題,我有三個類:

class A:
   # various fields here

class B(models.model):
   related_A = models.ForeignKey(A)
   related_C = models.ForeignKey(C)
   attribute1 = models.CharField(..)
   # Other attributes

class C(models.model):
   # Attributes

我想做的是,根據另一個參數attribute1 (來自類B),通過對關鍵字related_C上的類B進行過濾,來獲取類A。 為了正確說明,我在類C中有一個函數get_class_A(self)

get_class_A(self,param):
   classes_B = B.objects.filter(related_C = self,attribute1 = param)

它返回一個類B的QuerySet。我要做的是跟隨ForeignKey指向A,以便將該B的QuerySet轉換為對象A的列表。

我嘗試了各種事情,例如:

classes_A = B.objects.select_related('A').filter(related_C = self, attribute1 = param)

和一些變化,但無濟於事。 有誰知道該怎么做?

謝謝

def get_class_A(self, param):
    return A.objects.filter(b__related_c=self, b__attribute1=param).distinct()

您所描述的內容看起來很像A與C之間的ManyToMany關系。如果這樣聲明,並通過將B指定為直通模型來包含額外的attributes ,則Django會為您創建A與C之間的關系。

另外, select_related()與過濾結果無關,它只是一個工具,可以使您減少數據庫查詢的次數。 文檔

這可以提高性能,從而導致單個更復雜的查詢,但意味着以后使用外鍵關系將不需要數據庫查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM