返回查询结果

时间:2013-09-25 15:49:15

标签: django django-queryset

我无法返回查询结果。 所以我正在做的是:

Código(Python):

def filter(request):
    if request.method == 'POST':
        namepost = request.POST.get('name')
        print namepost
        result = Player.objects(name=namepost)
        print result
        # for n in result:
        #    print n.surname
        # jsonString = json.dumps(result)
    return HttpResponse(content_type='application/json')

我正在进行查询以获取帖子上的名称,并希望返回结果,但我没有得到...... 结果给出了以下内容:[] Json.dumps尝试了我,但是说:[]不是JSON可序列化的

如何返回查询结果?

1 个答案:

答案 0 :(得分:2)

Django模型实例和QuerySets可能不是(json)可序列化的(我从未尝试过)。例如,它如何序列化外键或ManyToMany关系?

我的解决方案是序列化那些相关的属性,例如

jsonString = json.dumps([dict(name=p.name, score=p.score)
                         for p in Player.objects.filter(name=namepost)
                        ])

(这里只是对你的播放器模型中的字段做一些假设 - 当然要调整到实际的定义)

如果您需要关注参考,您可以按照它们进行操作,例如

jsonString = json.dumps([dict(name=p.name, score=p.score, organization=p.org.name)
                         for p in Player.objects.filter(name=namepost)
                        ])

或者,您可以在模型上实现serialize()并以递归方式调用它们:

class Organization(models.Model):
    def serialize(self):
        return dict(name=self.name, address=self.address)

class Player(models.Model):
    def serialize(self):
        return dict(name=self.name, score=self.score, organization=self.org.serialize())

然后json.dumps序列化的字典:

jsonString = json.dumps([p.serialize() for p in Player.objects.filter(name=namepost)])