Como posso acessar valores QueryString no Serializer Django Rest Framework
-
21-12-2019 - |
Pergunta
Estou tentando acessar valores de querystring na classe serializadora.
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')
Visualizações
class OneZeroViewSet(viewsets.ModelViewSet):
serializer_class = OneZeroSerializer
queryset = OneZero.objects.all()
Essa é a maneira correta de acessar a string de consulta?
Solução
Ao usar ViewSets, você pode acessar a solicitação no contexto do serializador (da mesma forma que acessa a visualização).Você pode acessar os parâmetros de consulta deste
def get_alternate_name(self, obj):
request = self.context['request']
print request.QUERY_PARAMS['q']
return 'foo'
O atributo view.kwargs contém os argumentos nomeados analisados do seu url-config, portanto, da parte do caminho.
Outras dicas
De acordo com documentos você quer usar self.request.QUERY_PARAMS
Você pode vê-lo sendo usado aqui
ATUALIZAR:
A partir do DRF 3.0:
O uso da solicitação. QUERY_PARAMS agora está pendente de preterição em favor dos request.query_params rebaixados
self.context['request'].query_params