我有以下经理:
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字典中?
答案 0 :(得分:2)
您可以使用__
来访问相关的对象字段。
qs = self.model.objects.filter(
date__range=(start_date, end_date)
).values(
"customer__name"
)
答案 1 :(得分:1)
您还可以在__
之类的值中使用.values("customer__name")
来选择相关表格中的字段。
答案 2 :(得分: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