1

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

科迪戈(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 可序列化的

如何返回查询结果?

4

1 回答 1

2

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

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

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

(这里只是对您的 Player 模型中的字段进行一些假设 - 当然,将其调整为实际定义)

如果您需要关注参考,您可以关注它们,例如

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)])
于 2013-09-25T15:52:44.647 回答