Question

Je suis en train d'essayer d'accéder à querystring valeurs dans sérialiseur de classe.

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

Vues

class OneZeroViewSet(viewsets.ModelViewSet):

   serializer_class = OneZeroSerializer

   queryset = OneZero.objects.all()

Est-ce la bonne façon d'accéder à la chaîne de recherche?

Était-ce utile?

La solution

Lorsque vous utilisez des vues de vue, vous pouvez accéder à la demande dans le contexte Serializer (comme vous accéder à la vue).Vous pouvez accéder aux paramètres de la requête à partir de cette

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

L'attribut view.kwargs contient les arguments nommés analysés à partir de votre URL-CONFIG, donc de la partie de chemin.

Autres conseils

Selon le Docs Vous souhaitez utiliser self.request.QUERY_PARAMS

Vous pouvez le voir être utilisé ici

mise à jour:

AS de la DRF 3.0:

L'utilisation de la demande.Query_params est maintenant en attente de dépréciation en faveur de la requête mocassée.Query_params

self.context['request'].query_params

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top