如何获取Django QuerySet的原始值?解决返回数组问题
解决Django模板中显示QuerySet而非原始值的问题
核心原因
你的funcionarios_nome方法返回的是QuerySet对象(Django的查询集合),模板直接输出时会显示其默认的字符串格式,也就是你看到的<QuerySet [<Funcionarios: Alberto Santos>]>。要拿到原始的名字值,需要针对QuerySet的结果数量做不同处理。
解决方案
1. 当查询结果唯一时(仅一个匹配对象)
方式一:在视图中返回单个对象
把filter()换成get(),直接返回单个模型实例(注意:get()如果没找到或找到多个会抛出异常,确保你的过滤条件能唯一匹配):
class ListaFuncionariosView(ListView): def funcionarios_nome(self): # 替换成你的实际过滤条件 return Funcionarios.objects.get(id=1)
模板中直接调用对象的名字字段(假设模型中名字字段为nome):
{{ view.funcionarios_nome.nome }}
方式二:保留QuerySet,在模板中取第一个元素
如果坚持用filter(),可以在模板中直接取QuerySet的第一个元素的字段:
{{ view.funcionarios_nome.first.nome }}
2. 当查询结果有多个时
需要用for循环遍历QuerySet,逐个输出名字:
{% for funcionario in view.funcionarios_nome %} {{ funcionario.nome }} {% endfor %}
关于.values()的正确用法
.values()返回的是包含字典的QuerySet,比如Funcionarios.objects.filter(...).values('nome')会得到类似<QuerySet [{'nome': 'Alberto Santos'}, ...]>的结果。使用时同样需要遍历或取单个元素的键:
<!-- 单个结果时 --> {{ view.funcionarios_nome.first.nome }} <!-- 多个结果时 --> {% for item in view.funcionarios_nome %} {{ item.nome }} {% endfor %}
一般来说,直接使用模型实例(不用.values())会更直观,除非你只需要模型的部分字段数据。
内容的提问来源于stack exchange,提问作者Gustavo Cavasotto
相关产品推荐
相关产品推荐

