Django - Передать переменную в сериализатор, которая используется при вычислении поля serializers.SerializerMethodField?

Итак, у меня есть сериализатор, который добавляет атрибут. Допустим, я хочу сериализовать данные Post, которые представляют собой сообщение на Facebook или Twitter. Когда я сериализую его, допустим, я хочу передать переменную в сериализатор region, потому что я использую эту переменную для вычисления нужного мне атрибута в сериализаторе. Например, я хочу сделать что-то вроде PostSerializer(post_object, region='Italy'), и он будет использовать region='Italy' для вычисления атрибута, который является serializers.SerializerMethodField. Как я могу передать переменную в мой сериализатор, которая используется для вычисления serializers.SerializerMethodField()?

serializer.py

class PostSerializer(serializers.ModelSerializer):
    post_count_from_region = serializers.SerializerMethodField()

    class Meta:
        model = Post
        fields = ('author', 'body', 'created', 'updated_at', 'post_count_from_region')

    def get_post_count_from_region(self, post_obj, region:str):
        return Post.objects.filter(region=region).count()

Итак, более наглядный пример того, как выглядит этот случай использования, выглядит следующим образом:

view.py

def get_full_post_data_by_uuid(request, post_uuid, region: str):
    post_obj = Post.objects.get(pk=post_uuid)
    return Response(PostSerializer(post_obj, region=region).data, status=200)

Так вот, для чего в сериализаторах на Django служит context. context принимает словарь, чтобы вы могли сделать.

PostSerializer(post_object, context={'region':'Italy'})

then under serializer

def get_post_count_from_region(self, post_obj):
    region = self.context.get('region', <default value>)
    return Post.objects.filter(region=region).count()
Вернуться на верх