如何在Serializer Django Rest Framework中访问QueryString值

时间:2014-04-11 07:55:13

标签: django django-rest-framework

我正在尝试访问序列化程序类中的查询字符串值。

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()

这是访问查询字符串的正确方法吗?

3 个答案:

答案 0 :(得分:23)

使用ViewSets时,您可以在序列化程序上下文中访问请求(就像访问视图一样)。您可以从此

访问查询参数
def get_alternate_name(self, obj):
    request = self.context['request']
    print request.QUERY_PARAMS['q']
    return 'foo'

属性view.kwargs包含从url-config解析的命名参数,因此来自路径部分。

答案 1 :(得分:9)

根据您要使用self.request.QUERY_PARAMS

docs

您可以看到它被使用here

<强> 更新:

从DRF 3.0开始:

  

request.QUERY_PARAMS的使用现在正在等待弃用   小写的request.query_params

答案 2 :(得分:2)

self.context['request'].query_params