将Queryset转换为包含JSON值的字典

时间:2014-11-17 13:31:45

标签: python json django dictionary django-queryset

我编写了一个Ajax调用来返回actor名称。除序列化外,一切正常。

模型

class ActorManager (models.Manager):
    def actor_like(self, query):
        actor_list = self.values('name', 'id').filter(name__icontains=query)
        # actor_list = self.filter(name__icontains=query) <-- this works. but I need 'values'
        return actor_list

view.py

def search(request, types, query):
    lists = Actor.objects.actor_like(query)
    data = serializers.serialize('json', lists)
    return HttpResponse(data, content_type='application/json')

以上抛出错误,

/ search / actor / bal /

中的AttributeError

&#39;字典&#39;对象没有属性&#39; _meta&#39;

而模型查询&#34;值&#34;工作良好。以下工作正常,

actor_list = self.filter(name__icontains=query)

我需要&#34;价值观&#34;为了减少数据传输。我怎样才能做到这一点?

请提前帮助,谢谢。

1 个答案:

答案 0 :(得分:2)

serializers.serialize仅适用于完整查询集。但values会返回一个dicts容器,因此您可以或多或少地将其直接传递给json.dumps - 您只需将容器本身转换为列表即可。

lists = Actor.objects.actor_like(query)
data = json.dumps(list(lists))