У меня есть случай, когда значения для поля сериализатора зависят от идентификатора текущего пользователя. Я видел, как добавить пользователя в контекст при инициализации сериализатора, но я не уверен, как это сделать при использовании ViewSet, поскольку вы поставляете только класс serializer, а не фактический экземпляр serializer.
В основном я хотел бы знать, как перейти от:
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
Извините, если это было неясно, из DOC: Добавление дополнительного контекста Который говорит, чтобы сделать
serializer = AccountSerializer(account, context={'request': request})
serializer.data
Но я не уверен, как сделать это автоматически из viewet, так как я могу изменить только класс serializer, а не сам экземпляр serializer.