2016-08-04 88 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