我收到了一个错误, / ResultJSON / v1 / results /中的TypeError 'tuple'对象不可调用。
我在views.py,
中写了一个方法results = OrderedDict([
('id',x.id)
('name', x.name)
for x in Post.objects.all()
])
当我浏览此错误时,我读错了,因为没有逗号(,)。
但是我在('id',x.id)和('name',x.name)和('name',x.name)之间添加了逗号,我收到错误没有为此配置Python解释器项目
所以,我无法理解为什么会发生这种错误。我该如何解决?
在views.py中,我写了
import json
from collections import OrderedDict
from django.http import HttpResponse
from accounts.models import Post
def render_json_response(request, data, status=None):
json_str = json.dumps(data, ensure_ascii=False, indent=2)
callback = request.GET.get('callback')
if not callback:
callback = request.POST.get('callback')
if callback:
json_str = "%s(%s)" % (callback, json_str)
response = HttpResponse(json_str, content_type='application/javascript; charset=UTF-8', status=status)
else:
response = HttpResponse(json_str, content_type='application/json; charset=UTF-8', status=status)
return response
def UserResult(request):
results = OrderedDict([
('id',x.id)
('name', x.name)
for x in Post.objects.all()
])
data = OrderedDict([ ('results', results) ])
return render_json_response(request, data)
答案 0 :(得分:1)
你正在混合语法;你不能将列表理解与一些文字元素混合在一起,列表理解每次迭代都不能产生多个元素。
此外,您不能制作一个包含多个密钥副本的字典(有序或其他)。
我怀疑您正在尝试在列表中创建多个词典,每个词典都包含ID和名称:
results = [OrderedDict([('id', x.id), ('name', x.name)])
for x in Post.objects.all()]
仅针对id和name字段查询数据库可能更有效和可读:
fields = ('id', 'name')
results = [OrderedDict(zip(fields, x))
for x in Post.objects.order_by. values_list(*fields)]
答案 1 :(得分:0)
您尝试做的整个有序的dict事情看起来有点不必要,只需使用django queryset创建它
results = Post.objects.order_by().values_list('id', 'name') # or values()..