2016-10-17 1 views
0

Вот мой views.py:параметры URL запроса не обрабатываются в Джанго отдыха

class my4appCompanyData(generics.ListAPIView): 
    serializer_class = my4appSerializer 

    def get_queryset(self,request): 
     """Optionally restricts the returned data to ofa company, 
     by filtering against a `id` query parameter in the URL. """ 
     queryset = companies_csrhub.objects.all() 
     #url_id = self.request.query_params.get('id', None) 
     url_id = request.GET.get('id', None) 
     if id is not None: 
      queryset = queryset.filter(id=url_id) 
     elif id is ALL: 
      queryset = companies_csrhub.objects.all() 
     else: 
      queryset = "Error data not found" 
     return queryset 

И мой urls.py:

router.register(r'api/my4app/company/$', views.my4appCompanyData.as_view(),base_name="company") 

URL используется для проверки: mywebsite/api/my4app/company/?id=100227

планирует добавить несколько фильтров со значениями по умолчанию, но не работает. Пожалуйста помоги.

+0

Вы возвращаетесь в середине этого метода. –

ответ

0
class my4appCompanyData(generics.ListAPIView): 
    serializer_class = my4appSerializer 

    def get_queryset(self,request): 
     """Optionally restricts the returned data to ofa company, 
     by filtering against a `id` query parameter in the URL. """ 
     queryset = companies_csrhub.objects.all() 
     url_id = request.query_params.get('id', None) 
     if id is not None: 
      queryset = queryset.filter(id=url_id) 
     elif id is ALL: 
      queryset = companies_csrhub.objects.all() 
     else: 
      queryset = [] 
     return queryset 

Удалить идентификатор возврата, так как идентификатор не является запросом, поэтому он даст ошибку. Также в другой части инструкции if вы возвращаете строку, но вы не можете этого сделать, так как строка не является набором запросов.

+0

Извините, что идентификатор возврата был только опечаткой, проверяя, но с результатом тоже результат {detail: not found}. Но когда я жестко кодирую то же значение в фильтре, он работает. Мне нужен способ доступа к параметрам стиля пары ключевых значений из url. –

+0

Есть ли способ отладки строки за строкой в ​​django и посмотреть, что такое набор vakue для параметров? Или предложите лучший метод. Это будет полезно. –

+0

Я не уверен, но можете ли вы сделать это после получения url_id? url_id = int (url_id) –

0

Согласно официальным Docs (http://www.django-rest-framework.org/api-guide/filtering/#filtering-against-query-parameters)

Я думаю, что ваш код не работает, потому что вы используете:

url_id = request.query_params.get('id', None) 

Вместо:

url_id = self.request.query_params.get('id', None) 

В документации вы можете найти что функция get_queryset получает только self param, вы должны удалить request param.

+0

Tried url_id = self.request.get ('id', None) не работает. –

Смежные вопросы