Как я могу получить доступ к значениям 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()
Является ли это правильным способом доступа к запросам?
Ответы
Ответ 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