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

1 投票
1 回答
3786 浏览
提问于 2025-04-17 22:27

我需要对我的 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'>

我现在不知道该怎么做了。

1 个回答

2

这里的问题是,你在一个需要 QuerySet 的地方用了 brands(这是一个 Page 对象)。

看起来分页和表单集合并不是为了配合使用而设计的。从源代码来看,brands.object_list 可能还是一个 QuerySet。如果是这样的话,就在你之前使用 brands 的地方用这个。

这个回答 提供了一个比较绕的解决方案来让两者一起使用,但效率不高。(它会先去数据库获取所需的项目 ID,然后再构建一个新的 QueryList,明确包含这些 ID。)

撰写回答