0

以下のようなリソースがあるとします。

class PostResource(ModelResource):

    children = fields.ToManyField('MyApp.api.resources.PostResource',
                 attribute='comments', full=True, null=True)

基本的には、この children フィールドのみを返してフラット化したいと考えています。


[ {child-1-data}, {child-2-data} ]
ではなく、 次のようになります{ children: [ {child-1-data}, {child2-data} ] }

どうやってやるの?

さらに、同じモデル クラスの別の表現が必要な場合は、次のように新しいリソース クラスを作成する必要がありますか?

class PostNormalResource(ModelResource):
      class Meta:
          queryset= models.Post.objects.all()
          fields = ['text', 'author']
4

2 に答える 2

0

alter_detail_data_to_serializeメソッドをオーバーライドしてみてください。オブジェクト全体が脱水された直後に呼び出されるため、シリアライズされる前に結果の辞書を変更できます。

class PostResource(ModelResource):
    children = fields.ToManyField('MyApp.api.resources.PostResource',
             attribute='comments', full=True, null=True)

    def alter_detail_data_to_serialize(self, request, data):
        return data.get('children', [])

同じモデルの異なる表現について - はい。基本的に、単一に多くの表現を持たせるべきではありません。これは、Resourceあいまいさにつながり、維持が困難になるためです。

于 2013-10-07T18:47:24.680 に答える