2014-04-11 2 views
17

Sto tentando di accedere ai valori di querystring nella classe serializer.Come accedere ai valori di QueryString in Serializer 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') 

Visualizzazioni

class OneZeroViewSet(viewsets.ModelViewSet): 

    serializer_class = OneZeroSerializer 

    queryset = OneZero.objects.all() 

È questo il modo giusto per accedere querystring?

risposta

20

Quando si utilizza ViewSets, è possibile accedere alla richiesta nel contesto serializzatore (come si accede alla vista). È possibile accedere ai parametri di query da questo

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

I view.kwargs attributo contiene l'argomenti con nome analizzati dal vostro URL-config, quindi dal percorso-parte.

+0

Per le versioni più recenti: 'request.QUERY_PARAMS' è stato deprecato a favore di' request.query_params' dalla versione 3.0, ed è stato completamente rimosso dalla versione 3.2. – lukik

8

Secondo il docs che si desidera utilizzare self.request.QUERY_PARAMS

Lo si può vedere in uso here

UPDATE:

Come di DRF 3.0:

Il l'uso di request.QUERY_PARAMS è n OW attesa di disapprovazione a favore delle request.query_params cambiate in maiuscolo

+0

Questo è l'errore quando ho stampato questo comando oggetto 'OneZeroSerializer' non ha un attributo 'richiesta'. Penso che questo possa essere usato in viewset non per Serializer Class –

+0

Ah sì, ho letto male quello che stava succedendo. I serializzatori non sono legati alle richieste, puoi usarli separatamente se lo desideri. Ciò significa che non hanno alcun concetto di dati GET e POST. È necessario modificare la vista per inviare i parametri della query al serializzatore. – rockingskier

1

self.context['request'].query_params