Pregunta

Estoy tratando de acceder a querystring valores en serializador de clase.

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

Vistas

class OneZeroViewSet(viewsets.ModelViewSet):

   serializer_class = OneZeroSerializer

   queryset = OneZero.objects.all()

Es esta la manera correcta de acceder a querystring?

¿Fue útil?

Solución

Cuando use Viewsets, puede acceder a la solicitud en el contexto del Serializer (como acceder a la vista).Puede acceder a los parámetros de consulta de este

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

El atributo View.KWARGS contiene los argumentos nombrados analizados de su configuración de URL, por lo que desde la parte de la ruta.

Otros consejos

De acuerdo a la docs usted desea utilizar self.request.QUERY_PARAMS

Usted puede ver que se utiliza aquí

ACTUALIZACIÓN:

Como de DRF 3.0:

El uso de la solicitud.QUERY_PARAMS está ahora a la espera de ser desaprobado en favor de la convertidas a minúsculas solicitud.query_params

self.context['request'].query_params

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top