我有一种情况,其中序列化器字段的值取决于当前登录用户的身份。我已经看到了在初始化序列化程序时如何将用户添加到上下文中,但是我不确定在使用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
很抱歉,如果不清楚,请参阅DOC: 添加额外的上下文 说明
serializer = AccountSerializer(account, context={'request': request})
serializer.data
但是我不确定如何从视图集中自动执行此操作,因为我只能更改序列化程序类,而不能更改序列化程序实例本身。
self.context.get('request').user.has_perm("some.permission")
吗?