相关疑难解决方法(0)

将请求上下文从Django Rest Framework中的Viewset传递给序列化程序

我有一种情况,其中序列化器字段的值取决于当前登录用户的身份.我已经看到了在初始化序列化程序时如何将用户添加到上下文中,但是我不确定在使用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)

但我不知道如何从视图集自动执行此操作,因为我只能更改序列化程序类,而不是序列化程序实例本身.

django serializer django-rest-framework

51
推荐指数
2
解决办法
3万
查看次数

标签 统计

django ×1

django-rest-framework ×1

serializer ×1