我正在尝试在Serializer类中访问QueryString值。

class OneZeroSerializer(rest_serializer.ModelSerializer):

    location = rest_serializer.SerializerMethodField('get_alternate_name')

    def get_alternate_name(self, obj):
        view = self.context['view']
        print view.kwargs['q']  #output is {}
        return 'foo'


    class Meta:
        model = OneZero

        fields = ('id', 'location')
.

视图

class OneZeroViewSet(viewsets.ModelViewSet):

   serializer_class = OneZeroSerializer

   queryset = OneZero.objects.all()
.

是访问QueryString的正确方法?

有帮助吗?

解决方案

使用ViewSets时,可以访问序列化程序上下文中的请求(如您访问视图)。您可以从此访问该查询参数>

def get_alternate_name(self, obj):
    request = self.context['request']
    print request.QUERY_PARAMS['q']
    return 'foo'
.

属性视图.kwargs包含从url-config中解析的命名参数,从路径部分中。

其他提示

根据 docs 要使用self.request.QUERY_PARAMS

你可以看到它被使用

更新:

DRF 3.0:

请求的使用.Query_Params现在正在削弱弃用问题 低级Request.Query_Params

self.context['request'].query_params

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top