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

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

最佳答案

您可以使用__ 访问相关的对象字段。

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

关于Django - 如何在 queryset .values() 中获取显示名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38766494/

相关文章:

python - Django .latest() 值

django - 在数据迁移中访问模型管理器方法

python - 使用 python 2.5 安装 django,而不是使用默认版本的 python

django - 我是否在 django 中以错误的方式重写了模型上的保存方法?

python - 如何使用 View 中的列表在 Django 中创建下拉列表

django - 如何在 Django 中聚合单个查询集?

python django项目和文件夹结构(与WAMP不同)

django推迟相关模型查询集中的所有字段

python - 使用 MySQL 从 Django QuerySet 获取不同的值

python - 将 QuerySet 结果插入 Django 中的表中