2016-11-17 2 views
1

Я использую DjangoRestApi, и хотя он работает как шарм с представлениями на основе запроса (на основе orm), я изо всех сил пытаюсь сделать представления, которые используют разные обратные операции, чтобы вести себя так же, как orm на основе. В частности, я хочу добавить фильтры и автоматически их настроить и проверить.django-rest-framework с фильтрацией на основе orm

код Псевдо ниже:

class NewsFilter(django_filters.FilterSet): 
    category = django_filters.NumberFilter(name='category') 
    limit = django_filters.NumberFilter(name='limit') 
    page = django_filters.NumberFilter(name='page') 


class NewsView(generics.APIView): 
    filter_class = NewsFilter 

    def get(self, request): 
     filters = self.filter_class(??) # not sure, what to put here 

     payload = logic.get_business_news(**filters.data) # same 

     return Response(payload, status=status.HTTP_200_OK) 

Любой намек, как решать проблемы будут оценены.

Конечная цель состоит в том, чтобы:

  • пользователь вводит что-то в URL или отправляет через POST, Джанго-остальные перехватывает соответствующие значения, извлекает их, бросает их в правильный тип и возвращают в качестве словаря
  • фильтры являются отображаются как они будут, если сериализатор был основан ORM

ответ

1

функция подписи к какой-либо один фильтр, как

class MyFilter(django_filters.Filter): 
    def filter(self,queryset,value): 
     [...] 

The function signature to a FilterSet is:

def __init__(self, data=None, queryset=None, prefix=None, strict=None): 

Таким образом, это выглядит, как вы проходите в request.GET, как data пар, а затем передать в вашем QuerySet.

+0

Я немного отредактировал оригинальный вопрос, чтобы уточнить, что я ищу, поскольку этот ответ а) очень неполный и b) У меня такое чувство, что не отвечаю на мой вопрос. – Drachenfels

+0

По сути, 'FilterSet' работает на запросах. У вас есть набор запросов, который вы отфильтровываете? Если нет, вы не можете использовать 'FilterSet'. –

+0

Я не хочу работать с queryset, поскольку я не использую ORM, я хочу, чтобы визуализировать форму в/api/endpoint, чтобы разработчики и другие не-технические парни могли тестировать/работать с api без ручного управления набрав полезную нагрузку json и так далее. Я начал понимать, что django-rest-framework на самом деле очень ограниченная структура с учетом только одного рабочего процесса. :/ – Drachenfels

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