2013-09-25 283 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