TypeError'tuple'对象不可调用

时间:2017-02-09 13:05:54

标签: python django

我收到了一个错误, / 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)

2 个答案:

答案 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()..