如何访问序列化器查询集中的上下文

eks*_*soo 0 django django-rest-framework

我正在寻找一种访问上下文以按当前用户进行过滤的方法

 class RemovePermissionsSerializer(serializers.Serializer):
        user_permissions = serializers.PrimaryKeyRelatedField(
            many=True, queryset=Permission.objects.filter(user = context.get('request').user)
        )
Run Code Online (Sandbox Code Playgroud)

我无法访问上下文,因为它未定义,self.context 也无法访问

shi*_*net 5

为了实现重写RemovePermissionsSerializer中的get_fields方法,如下所示:

class RemovePermissionsSerializer(serializers.Serializer):

def get_fields(self):
    fields = super().get_fields()
    # If you want your logic according to request method
    request = self.context.get('request')
    if request and request.method.lower() == "<your method here>":
        fields['user_permissions'] = serializers.PrimaryKeyRelatedField(
            many=True, queryset=Permission.objects.filter(user=request.user)
        )
    
    return fields
Run Code Online (Sandbox Code Playgroud)

如果您想根据操作更改表示,您可以执行以下操作:

class RemovePermissionsSerializer(serializers.Serializer):

def get_fields(self):
    fields = super().get_fields()
    # IF you want your logic according to action
    view = self.context.get('view')
    if view and view.action == "<action name>":
        fields['user_permissions'] = serializers.PrimaryKeyRelatedField(
            many=True, queryset=Permission.objects.filter(user=request.user)
        )
    return fields
Run Code Online (Sandbox Code Playgroud)