不带整个queryset的Django分页

不带整个queryset的Django分页,django,optimization,Django,Optimization,在Django中,我使用paginator,如下所示: 从django.core.paginator导入paginator、EmptyPage、PageNotAnInteger def myView(request): ... paginator = Paginator(Annonce.objects.filter(name="huhu"), 10) paginator._count = s.count() try: annonces = pagi

在Django中,我使用paginator,如下所示:

从django.core.paginator导入paginator、EmptyPage、PageNotAnInteger

def myView(request):
    ...
    paginator = Paginator(Annonce.objects.filter(name="huhu"), 10)
    paginator._count = s.count()
    try:
        annonces = paginator.page(page)
    except PageNotAnInteger:
        annonces = paginator.page(1)
    except EmptyPage:
        annonces = paginator.page(paginator.num_pages)
在s.search函数中,我对我的postgres数据库进行查询

结果表明,即使我每页显示10个项目,查询也不受限制

我试图用Annonce.objects.filtername=huhu[:10]限制查询,并自己指定计数。但是如果我这样做,分页器就不起作用了

有没有办法对此进行优化?

将此示例用作编写适当使用django Paginator的视图函数的指南

请注意,在示例代码snippert中-

def listing(request):
    contact_list = Contacts.objects.all()
    paginator = Paginator(contact_list, 25) # Show 25 contacts per page

    page = request.GET.get('page')  # <--- This is the key to your solution.
contacts=paginator.pagepage对数据库执行查询,根据给定的页码,在每页需要25个对象的条件下,仅检索有限的对象集。

将此示例用作编写适当使用django paginator的视图函数的指南

请注意,在示例代码snippert中-

def listing(request):
    contact_list = Contacts.objects.all()
    paginator = Paginator(contact_list, 25) # Show 25 contacts per page

    page = request.GET.get('page')  # <--- This is the key to your solution.

contacts=paginator.pagepage对数据库执行查询,根据给它的页码和每页需要25个对象的条件,只检索有限的对象集。

您在上下文中放置了什么?你在重复什么?你在你的上下文中放了什么?你在重复什么?事实上你是对的。我的设计直接遵循您描述的设计。唯一让我认为在构造分页器时对结果进行了评估的区别是,我使用了一个缓存系统来处理结果。这在构造分页器时强制求值。此示例无法解决此问题,仍将调用计数查询。调用将调用Paginator.validate_number,它将调用Paginator.num_页面,它将调用count,而count仍将调用数据库上的total count。实际上,您是对的。我的设计直接遵循您描述的设计。唯一让我认为在构造分页器时对结果进行了评估的区别是,我使用了一个缓存系统来处理结果。这在构造分页器时强制求值。此示例无法解决此问题,仍将调用计数查询。调用将调用Paginator.validate_number,它将调用Paginator.num_页面,它将调用count,而count仍将调用数据库上的total count。