Передать контекст запроса в сериализатор из Viewset в Django Rest Framework
У меня есть случай, когда значения для поля сериализатора зависят от личности вошедшего в систему пользователя. Я видел, как добавить пользователя в контекст при инициализации сериализатора, но я не уверен, как это сделать при использовании ViewSet, поскольку вы предоставляете только класс сериализатора, а не фактический экземпляр сериализатора.
В основном я хотел бы знать, как перейти от:
class myModelViewSet(ModelViewSet):
queryset = myModel.objects.all()
permission_classes = [DjangoModelPermissions]
serializer_class = myModelSerializer
чтобы:
class myModelSerializer(serializers.ModelSerializer):
uploaded_by = serializers.SerializerMethodField()
special_field = serializers.SerializerMethodField()
class Meta:
model = myModel
def get_special_field(self, obj):
if self.context['request'].user.has_perm('something.add_something'):
return something
Извините, если не ясно, из DOCs:Добавление дополнительного контекста Который говорит делать
serializer = AccountSerializer(account, context={'request': request})
serializer.data
Но я не уверен, как сделать это автоматически из набора просмотра, поскольку я могу изменить только класс сериализатора, а не сам экземпляр сериализатора.