栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Django过滤器使用分页

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django过滤器使用分页

要使用Django过滤器并对过滤后的结果进行分页,你可以执行以下操作:

  1. 为你的模型创建一个过滤器类:

my_project/my_app/filters.py:

import django_filtersclass MyModelFilter(django_filters.FilterSet):    class meta:        model = MyModel        # Declare all your model fields by which you will filter        # your queryset here:        fields = ['field_1', 'field_2', ...]
  1. 每个

    FilterSet
    对象都有一个
    .qs
    包含过滤查询集的属性,如果需要,你甚至可以覆盖它。

  2. 我们将对我们的

    .qs
    财产进行分页
    MyModelFilter

my_project/my_app/views.py

from . import filtersfrom django.core.paginator import Paginator, EmptyPage, PageNotAnIntegerdef my_view(request):    # BTW you do not need .all() after a .filter()     # local_url.objects.filter(global_url__id=1) will do    filtered_qs = filters.MyModelFilter(request.GET, queryset=MyModel.objects.all()       ).qs    paginator = Paginator(filtered_qs, YOUR_PAGE_SIZE)    page = request.GET.get('page')    try:        response = paginator.page(page)    except PageNotAnInteger:        response = paginator.page(1)    except EmptyPage:        response = paginator.page(paginator.num_pages)    return render(        request,         'your_template.html',         {'response': response}    )

在那里,你拥有了!

PS_1:根据我的经验,使用Django过滤器时,使用Django Rest framework可以更好地“玩”。
PS_2:如果你要使用DRF,我已经写了一个示例,说明如何在基于函数的视图中使用分页,可以轻松地将其与结合使用

FilterSet

@api_view(['GET',])def my_function_based_list_view(request):    paginator = PageNumberPagination()    filtered_set = filters.MyModelFilter( request.GET,  queryset=MyModel.objects.all()        ).qs    context = paginator.paginate_queryset(filtered_set, request)    serializer = MyModelSerializer(context, many=True)    return paginator.get_paginated_response(serializer.data)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/385719.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号