2017-02-09 77 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