2014-04-11 3 views
17

Ich versuche, Querystring-Werte in der Serialisierungsklasse zugreifen.Wie kann ich auf QueryString-Werte in Serializer Django Rest Framework zugreifen

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

Ansichten

class OneZeroViewSet(viewsets.ModelViewSet): 

    serializer_class = OneZeroSerializer 

    queryset = OneZero.objects.all() 

Ist dies der richtige Weg Abfragezeichenfolgeflag zugreifen?

Antwort

20

Wenn Viewsets verwenden, können Sie die Anfrage im Serializer Kontext zugreifen (wie Sie die Ansicht zugreifen). Sie können die Abfrage params Zugriff von diesem

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

Das Attribut view.kwargs die genannten Argumente aus Ihrer URL-config, so von dem Pfad-Teil analysiert enthält.

+0

Für neuere Versionen: 'request.QUERY_PARAMS' wurde seit Version 3.0 für 'request.query_params' veraltet und wurde seit Version 3.2 vollständig entfernt. – lukik

8

Nach dem docs Sie self.request.QUERY_PARAMS

Sie sehen, es verwendet wird here

UPDATE kann verwenden möchten:

Ab DRF 3.0:

Die Verwendung von request.QUERY_PARAMS ist n ow anhängig deprecation zugunsten der kleingeschrieben request.query_params

+0

Dies ist der Fehler, wenn ich diesen Befehl Objekt ‚OneZeroSerializer‘ gedruckt hat kein Attribut ‚Anforderung‘. Ich denke, das kann in Viewset nicht für Serializer-Klasse verwendet werden –

+0

Ah ja, falsch gelesen, was los war. Serializer sind nicht an Anfragen gebunden, Sie können sie bei Bedarf auch separat verwenden. Dies bedeutet, dass sie kein Konzept von GET- und POST-Daten haben. Sie müssen Ihre Ansicht ändern, um die Abfrageparameter an den Serializer zu senden. – rockingskier

1

self.context['request'].query_params

Verwandte Themen