将上下文从一个序列化器传递到另一个序列化器?

5 python django django-rest-framework

使用 Django REST Framework,我有 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})
Run Code Online (Sandbox Code Playgroud)

但是,当然,这段代码是行不通的。
我可以在这里做什么样的解决方法?

luc*_*tti 4

当您像您一样在序列化器中定义关系时,当页面的注释被序列化时, 的PageSerializer上下文将自动传递到。CommentSerializer

因此,只需定义comments = CommentSerializer(many=True)即可。