如何在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
相关产品推荐
相关产品推荐

