2016-11-28 7 views
3

Django RESTフレームワークでは、私は2つのシリアライザPageSerializerCommentSerializerを持っています。シリアライザ間でコンテキストを渡しますか?

CommentSerializerは、いくつかの余分な「コンテキスト」値に依存しますが、直接取得するのではなく、ネストされた関係があるためPageSerializerから取得する必要があります。

class CommentSerializer(serializers.ModelSerializer): 
    ... 
    my_field = serializers.SerializerMethodField() 

    def get_my_field(self, comment): 
     my_value = self.context['my_value'] 
     ... 

class PageSerializer(serializers.ModelSerializer): 
    ... 
    comments = CommentSerializer(
     many=True, 
     context={'my_value': my_value} # my_value doesn't exist until __init__ is called, so I can't pass it 
    ) 

... 
my_value = 1 
page_serializer = PageSerializer(page, context={'my_value': my_value}) 

しかし、もちろん、このコードは動作しないことができます。

は、だから私はこのようなものを持っている必要があります。
ここではどのような回避策を講じることができますか?

答えて

3

シリアライザで関係を定義すると、PageSerializerのコンテキストは、ページのコメントがシリアル化されるときにCommentSerializerに自動的に渡されます。

したがって、定義するだけでcomments = CommentSerializer(many=True)となります。

+0

ああ、それは安堵です、ありがとう! – user3134477

関連する問題