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 シリアライズ不可

クエリ結果を返すにはどうすればよいですか?

4

1 に答える 1

2

Django モデル インスタンスと QuerySets はおそらく (json) シリアライズ可能ではありません (試したことはありません)。たとえば、外部キーまたは ManyToMany リレーションをどのようにシリアル化しますか?

私の解決策は、関連する属性をシリアル化することです。

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 に答える