You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中显示QuerySet的原始值而非对象数组?

Django QuerySet 转换为指定字符串格式问题解决

问题描述

我编写了以下代码来获取QuerySet:

funcionarios_aniver = FuncionarioAux.objects.filter(FuncionarioDataNasc__gte=dia_um, FuncionarioDataNasc__lte=ultimo_dia)

但它返回的是对象数组形式的QuerySet,例如:

<QuerySet [<FuncionarioAux: Alberto Santos>, <FuncionarioAux: Josney Arman>]>

我希望它返回原始值,格式如下:

Alberto Santos, Josney Arman

我曾尝试在代码末尾使用.get()方法,但触发了以下错误:

funcionarios.models.FuncionarioAux.MultipleObjectsReturned: get() returned more than one FuncionarioAux -- it returned 2!

解决方法

首先明确:.get()方法只能返回单个对象,当查询结果存在多个时必然报错,所以这里不能使用该方法。以下是两种可行的处理方式:

方式一:使用values_list + 字符串拼接

先通过values_list提取目标字段的纯值,再用逗号拼接成指定格式。假设模型中存储名称的字段为nome,替换为你实际的字段名即可:

# 提取指定字段的一维值列表
nomes = FuncionarioAux.objects.filter(
    FuncionarioDataNasc__gte=dia_um, 
    FuncionarioDataNasc__lte=ultimo_dia
).values_list('nome', flat=True)
# 拼接成目标格式字符串
funcionarios_aniver_str = ', '.join(nomes)

方式二:利用模型__str__方法拼接

如果你的FuncionarioAux模型已经在__str__方法中返回了显示名称(比如示例中的Alberto Santos就是该方法的返回值),可以直接遍历QuerySet拼接:

funcionarios_aniver = FuncionarioAux.objects.filter(
    FuncionarioDataNasc__gte=dia_um, 
    FuncionarioDataNasc__lte=ultimo_dia
)
# 遍历对象转字符串后拼接
funcionarios_aniver_str = ', '.join([str(obj) for obj in funcionarios_aniver])

补充提示

  • 若需要处理查询结果为空的场景,可以先判断funcionarios_aniver.exists(),再执行拼接逻辑,避免生成空字符串或触发异常。

内容的提问来源于stack exchange,提问作者Gustavo Cavasotto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 14:05:24