繁体   English   中英

TypeError 'tuple' 对象不可调用

[英]TypeError 'tuple' object is not callable

我收到一个错误, TypeError at /ResultJSON/v1/results/ 'tuple' object is not callable 。

我在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)

您正在混合语法; 您不能将列表推导式与某些文字元素混合在一起,并且列表推导式每次迭代不能产生一个以上的元素。

此外,您不能生成一个包含多个键副本的字典(有序或其他)。

我怀疑您正在尝试在列表中创建多个字典,每个字典都包含 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)]

您尝试执行的整个有序 dict 操作看起来有点不必要,只需使用 django 查询集创建它

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM