2016-05-11 13 views
2

MySQLデータベースからフィルタリングされたリストを取得しようとしています。クエリ自体は正常に見えるが、JSONはショーこの返さ:私が構築する必要があり仕様はこれを望んでいるときDjango Rest FrameworkでJSON出力をカスタマイズする

[ 
{ 
    "id": "0038", 
    "name": "Jane Doe", 
    "total_hrs_per_week": 6, 
    "timezone": "America/Los_Angeles" 
}, 
{ 
    "id": "0039", 
    "name": "John Doe", 
    "total_hrs_per_week": 10, 
    "timezone": "America/Los_Angeles" 
}] 

を:

{ 
"people":[ 
{ 
    "id": "0038", 
    "name": "Jane Doe", 
    "total_hrs_per_week": 6, 
    "timezone": "America/Los_Angeles" 
}, 
{ 
    "id": "0039", 
    "name": "John Doe", 
    "total_hrs_per_week": 10, 
    "timezone": "America/Los_Angeles" 
}]} 

ここに私のシリアライザは

class PeopleListSerializer(serializers.ModelSerializer): 
    id = serializers.CharField(source='id') 
    name =serializers.CharField(source='name') 
    total_hrs_per_week = serializers.IntegerField(source='total_hrs_per_week') 
    timezone = serializers.CharField(source='timezone') 

    class Meta: 
     model = models.Person 
     fields = ('id','name','total_hrs_per_week','timezone') 

どれですこのように返された結果をどのようにラップするのか?

EDIT:

私はそう

class PeopleListWrapperSerializer(serializers.Serializer): 
     people = PeopleListSerializer(many=True) 

     class Meta: 
      fields = ['people'] 

のような別のシリアライザでこれをラップする。しかし、これは次のエラーをスローしてみました:

Got AttributeError when attempting to get a value for field people on serializer PeopleListWrapperSerializer . The serializer field might be named incorrectly and not match any attribute or key on the Person instance. Original exception text was: 'Person' object has no attribute 'people'.

+0

fields = ['people']を指定しないと、このフィールドはとにかくなります。多分それはそこで混乱するでしょう。しかしそれは唯一の推測です。 –

答えて

2

にシリアライザの結果を包むことlist()メソッドをオーバーライドすることもできます。

+0

これはうまくいきますが、シリアライザクラス内にそのコードの一部または全部を保持するソリューションについて知っていますか?私はむしろ、ビューから直列化を制御したくないでしょう。 –

+0

@ L.W。私は現在、シリアライザだけを使ってこれを行う方法を知らない。このような方法を知ったときに私の答えが更新されます。 –

+0

これを答えとして受け入れます。他の解決策も見つかりませんでした。 –

0

あなたが入ってくるデータをお勧めします方法に応じてとあなたのモデルは、あなたができる:

関連する問題