我正在使用该django-filter
软件包在列表视图中提供搜索功能。
现在,我还要向该视图添加分页。
我正在尝试将分页与过滤后的查询集结合起来,但是我不知道如何继续。
到目前为止,我已经尝试了以下方法views.py
:
def search(request):
qs = local_url.objects.filter(global_url__id=1).all()
paginator = Paginator(qs, 25)
page = request.GET.get('page')
try:
pub = paginator.page(page)
except PageNotAnInteger:
pub = paginator.page(1)
except EmptyPage:
pub = paginator.page(paginator.num_pages)
url_filter = PublicationFilter(request.GET, queryset=qs)
return render(request, 'ingester/search_list.html', {'filter': url_filter, 'publication':pub})
要使用Django过滤器并对过滤后的结果进行分页,你可以执行以下操作:
开my_project/my_app/filters.py:
import django_filters
class 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', ...]
每个FilterSet
对象都有一个.qs
包含过滤查询集的属性,如果需要,你甚至可以覆盖它。
我们将对我们的.qs
财产进行分页MyModelFilter
:
开my_project/my_app/views.py
:
from . import filters
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def 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)
本文向大家介绍Django 自定义过滤器,包括了Django 自定义过滤器的使用技巧和注意事项,需要的朋友参考一下 示例 过滤器允许您将函数应用于变量。此函数可以使用0或1参数。语法如下: 过滤器可以链接在一起,因此非常有效: 如果将其翻译成python,上面的代码行将给出以下内容: 在此示例中,我们将编写一个verbose_name适用于模型(实例或类)或QuerySet的自定义过滤器。它将返回
问题内容: 天是用户输入以获得比(用户输入的天数)还早的结果的数字。例如,如果用户输入32天,则他们将获得30天之前的结果。 快速试用: 我的问题和尝试 来自输入字段的输入 在我的情况下,在Django中执行此操作的最佳方法是什么? 问题答案: 这样的事情将为你工作:
问题内容: 我注意到这里有内置的过滤器,但找不到。 我是Django的新手,不确定是否有这样的过滤器。 问题答案: 没有。但是,如果您是个小黑客……。 http://slacy.com/blog/2010/07/using-djangos-widthratio-template-tag-for- multiplication-division/ 计算A * B:{%widthaatio A 1 B
问题内容: 我正在尝试获取最新的Django模型对象,但似乎无法成功。 这些都不起作用: 问题答案:
本文向大家介绍dynamics-crm 使用过滤器过滤API查询,包括了dynamics-crm 使用过滤器过滤API查询的使用技巧和注意事项,需要的朋友参考一下 示例 您可以使用filter属性从CRM检索值的子集。在此示例中,仅返回公司名称等于CompanyName的帐户。
所有任务都实现了 Chain-of-responsibility 模式并且可以像ASP.NET MVC操作过滤器一样被拦截。 定义过滤器 public class LogEverythingAttribute : JobFilterAttribute, IClientFilter, IServerFilter, IElectStateFilter, IApplyStateFilter {