最佳答案
我有一个案例,序列化器字段的值取决于当前登录用户的身份。我已经看到了在初始化序列化器时如何将用户添加到上下文中,但是我不确定在使用 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
抱歉,医生说得不够清楚: 添加额外上下文 也就是说
serializer = AccountSerializer(account, context={'request': request})
serializer.data
但是我不确定如何从视图集自动执行此操作,因为我只能更改序列化器类,而不能更改序列化器实例本身。