Подтвердить что ты не робот

Как я могу получить доступ к значениям QueryString в Serializer Django Rest Framework

Я пытаюсь получить доступ к значениям запроса в классе serializer.

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

Просмотры

class OneZeroViewSet(viewsets.ModelViewSet):

   serializer_class = OneZeroSerializer

   queryset = OneZero.objects.all()

Является ли это правильным способом доступа к запросам?

4b9b3361

Ответ 1

При использовании ViewSets вы можете получить доступ к запросу в контексте сериализатора (например, вы получаете доступ к представлению). Вы можете получить доступ к параметрам запроса из этого

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

Атрибут view.kwargs содержит именованные аргументы, проанализированные из вашего url-config, поэтому из части пути.

Ответ 2

В соответствии с документами вы хотите использовать self.request.QUERY_PARAMS

Вы можете видеть, что он используется здесь

UPDATE:

Как и DRF 3.0:

Использование request.QUERY_PARAMS теперь ожидает отсрочки в пользу нижнего запроса request.query_params

Ответ 3

self.context['request'].query_params