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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top