我有一种情况,其中序列化器字段的值取决于当前登录用户的身份.我已经看到了在初始化序列化程序时如何将用户添加到上下文中,但是我不确定在使用ViewSet时如何执行此操作,因为您只提供序列化程序类而不是实际的序列化程序实例.
基本上我想知道如何去:
class myModelViewSet(ModelViewSet):
queryset = myModel.objects.all()
permission_classes = [DjangoModelPermissions]
serializer_class = myModelSerializer
Run Code Online (Sandbox Code Playgroud)
至:
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
Run Code Online (Sandbox Code Playgroud)
很抱歉,如果它是不明确的,从文档: 添加额外的Context 它说做
serializer = AccountSerializer(account, context={'request': request})
serializer.data
Run Code Online (Sandbox Code Playgroud)
但我不知道如何从视图集自动执行此操作,因为我只能更改序列化程序类,而不是序列化程序实例本身.