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()