2016-08-04 40 views
0

我有以下管理員:Django的 - 如何獲取查詢集.values中顯示名稱()

class Totals(Manager): 

def by_customer_and_date(self, start_date, end_date): 

    qs = self.model.objects.filter(
     date__range=(start_date, end_date) 
    ).values(
     "customer" 
    ).annotate(
     ...bunch of stuff... 
    ) 

    return qs 

customer是一個FK關係到另一個對象。現在,查詢集包含在相關的customer對象的ID中,但是我希望它使用顯示名稱,所以我可以很好地將它打包爲我的模板。

現在,我已經添加了以下到馬槽:

for q in qs: 
    q['customer'] = Customer.objects.get(id=q.get('customer')).name 

它工作正常,但感覺像額外的工作..對我來說這50次數據庫的訪問,而不是一個。是否有任何捷徑將顯示名稱放在qs字典中?

回答

2

您可以使用__來獲取相關對象字段。

qs = self.model.objects.filter(
    date__range=(start_date, end_date) 
).values(
    "customer__name" 
) 
+0

對。我喜歡Django。現在我可以用'{{item.customer__name}}'在我的模板中抓住它 –

1

您還可以使用__你的價值觀這樣.values("customer__name")內選擇對相關表字段。

0

使用此代碼獲取所有相關的客戶名稱。

class Totals(Manager): 

def by_customer_and_date(self, start_date, end_date): 

    name_list = self.model.objects.filter(
     date__range=(start_date, end_date) 
    ).values("customer__name", flat=True) 

    return name_list 
相關問題