'Page'对象没有属性'ordered'异常

问题描述 投票:1回答:1

我需要对我的modelformset_factory进行分页,但是我得到了这个异常:

Django Version: 1.6.2
Exception Type: AttributeError
Exception Value:    
'Page' object has no attribute 'ordered'

在我看来,我有这个:

BrandFormSet = modelformset_factory(Brand, form=BrandFormList, extra=0, **kw)

paginator, brands = paginate(request, Brand.objects.filter(shop=shop), 10)

分页功能代码:

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

def paginate(request, object_list, per_page):
    paginator = Paginator(object_list, per_page)

    page = request.GET.get('page')
    try:
        objects = paginator.page(page)
    except PageNotAnInteger:
        objects = paginator.page(1)
    except EmptyPage:
        objects = paginator.page(paginator.num_pages)

    return paginator, objects

现在这在我看来:

print type(Brand.objects.filter(shop=request.user.shop))
print type(brands)

输出:

<class 'django.db.models.query.QuerySet'>
<class 'django.core.paginator.Page'>

我不知道此时该怎么做。

python django pagination
1个回答
1
投票

这里的问题是你在期待brands的环境中使用Page(一个QuerySet)。

似乎分页和表单集不是为了协同工作而设计的。从浏览源代码看,它看起来像brands.object_list可能仍然是QuerySet。如果是这样,请使用之前使用过brands的地方。

This answer给出了将两者结合使用的hacky解决方案,但效率很低。 (它会一次访问数据库以获取所需的项ID,然后构造一个明确包含这些ID的新QueryList。)

© www.soinside.com 2019 - 2024. All rights reserved.