2013-09-25 285 views
1

我无法返回查询结果。 所以这是我在做什么是:返回查询结果

Código(蟒蛇):

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可序列化

如何返回查询结果?

回答

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) 
         ]) 

或者,你可以实现你的车型序列化()和调用这些递归:

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)]) 
+0

是的,正好。我已经尝试过类似的东西,所以我可以发送数据,例如姓名,年龄... 问题是,当我有数据引用另一个集合,就像它是一个外键,AI给错误(不是JSON可序列化的)。 在这种情况下,案件已经不知道是否可以做到这一点,我真的需要所有的数据。 随着tastypie,我现在发送一切,从而使查询和运输不知道它是否给... – Helio