2017-02-09 71 views
-2

我收到错误, TypeError at/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)和last'('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

你想在这里实现什么?字典只能保存**唯一的**键,不能生成多个'id'和'name'键并完成这项工作。 –

+0

你可能试图制作一个*字典列表*而不是? –

回答

1

你混合语法;你不能把列表理解与一些文字元素混合在一起,并且列表理解每次迭代不能产生多于一个元素。

此外,您不能生成一个包含多个密钥副本的字典(已排序或以其他方式)。

我怀疑你正在努力,而不是在列表中创建多个字典,每一个包含ID和名称:

results = [OrderedDict([('id', x.id), ('name', x.name)]) 
      for x in Post.objects.all()] 

这可能是更有效和可读性来查询数据库仅用于标识和名称田:

fields = ('id', 'name') 
results = [OrderedDict(zip(fields, x)) 
      for x in Post.objects.order_by. values_list(*fields)] 
0

命令你正在试图做的事情字典看起来有点不必要的整体,使用Django的只是创建查询集

results = Post.objects.order_by().values_list('id', 'name') # or values().. 
+0

使用'values()'(返回字典)而不是'values_list'(返回元组)会更一致。上面的内容将起作用*,除非*响应中的键的顺序很重要,在这种情况下需要一个有序的字典。 – Alasdair

+0

@Alasdair - 是的,我还没有弄清楚哪里最适合OP的用例,因为它根本不清楚他们打算如何使用它。 (我想不出任何有序的字典列表会有用。) – Sayse

+0

thx,你的意见。当我写UR代码时,我得到一个错误,TypeError在/ ResultJSON/v1/results/ 不是JSON可序列化的 我该如何解决它? – user7523656