@borisovdenis

Как добавить фильтрацию и сортировку в function-based views?

Есть проект на Django. В этом проекте есть REST API, реализованный с помощью django-rest framework и function-based views. Есть задача: в очень краткие сроки добавить фильтрацию и сортировку в функции обрабатывающие GET запросы. Нашел решение этой задачи для class-based, но т.к. сроки очень сжаты переписывать все вьюшки с использованием классов - затея не лучшая.
Подскажите, пожалуйста, как решить эту задачу используя уже существующие function-based views.
  • Вопрос задан
  • 200 просмотров
Пригласить эксперта
Ответы на вопрос 1
def order_qs(request, qs):
    order = request.GET.get('order')
    sort = request.GET.get('sort')
    if order == 'ASC':
        return qs.order_by(sort)
    elif order == 'DESC':
        return qs.order_by('-' + sort)
    else:
        return qs


def construct_page(request, qs):
    """ Builds the list-view with pagination """
    limit = request.GET.get('limit', 10)
    page_num = request.GET.get('page')
    paginator = Paginator(order_qs(request, qs), limit)
    try:
        page = paginator.page(page_num)
    except PageNotAnInteger:
        page = paginator.page(1)
    except EmptyPage:
        page = paginator.page(paginator.num_pages)
    return page


views.py:
def category_detail_view(request, cat_slug=None):
    category = get_object_or_404(Category, slug=cat_slug)
    ctx = {}
    ctx['category'] = category
    ctx['products'] = construct_page(request, Product.objects.filter(category=category))
    return render(request, 'main/category_detail.html', ctx)


Фильтрацию по такому же принципу
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы