【问题标题】:'Page' object has no attribute 'ordered' Exception“页面”对象没有属性“有序”异常
【发布时间】:2019-02-16 22:36:24
【问题描述】:

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

    这里的问题是您在期望QuerySet 的上下文中使用brandsPage)。

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

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

    【讨论】:

    • 使用brands.object_list 我得到了一个新错误:异常值:一旦切片被获取,就无法重新排序查询。
    • @Adam:嗯,这加强了我的感觉,即这两个功能并不是为了一起工作而设计的。我没有比我链接到的答案中更好的主意,他只是从头开始创建一个新的查询集......
    猜你喜欢
    • 2010-10-05
    • 2019-11-26
    • 2018-01-22
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    相关资源
    最近更新 更多