我正在尝试访问序列化程序类中的查询字符串值。
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()
这是访问查询字符串的正确方法吗?
答案 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
您可以看到它被使用here
<强> 更新: 强>
从DRF 3.0开始:
request.QUERY_PARAMS的使用现在正在等待弃用 小写的request.query_params
答案 2 :(得分:2)
self.context['request'].query_params