Django - 如何在queryset .values()中获取显示名称

时间:2016-08-04 11:47:12

标签: django django-queryset

我有以下经理:

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字典中?

3 个答案:

答案 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