gpt4 book ai didi

python - 仅处理 Django 中查询集的子集(并返回原​​始查询集)

转载 作者:行者123 更新时间:2023-11-30 23:43:08 24 4
gpt4 key购买 nike

我在 Django 中有一个通用 ListView ,它返回大约 300 个对象(除非执行搜索)。

我将分页设置为仅显示 10 个对象。

因此,我查询数据库,然后迭代对象,处理它们并在显示之前添加额外的值。我注意到所有 300 个对象都完成了处理,并且处理后完成了分页。所以我只想对要显示的对象进行处理以提高性能。

我计算查询集中应处理的对象的索引,第1页为0-10,第2页为11-20,第3页为21-30,依此类推。

现在我只想处理显示范围内的对象,但返回完整的查询集(因此流派 View 按预期工作)。

最初我尝试过:

for object in queryset[slice_start:slice_end] :
# process things here

return queryset

但是切片似乎返回了一个新的查询集,并且原始查询集对象没有任何计算值。

目前我的解决方案是:

index = -1
for object in queryset:
index += 1
if index < slice_start or index > slice_end : continue
# process things here
return queryset

现在这可以工作了,但对于 Python 来说似乎相当老套且不优雅。有没有更Pythonic的方法来做到这一点?

最佳答案

如果您使用 Django 的 Paginator 类 ( docs ),那么您可以请求当前页面并迭代 View 中的这些对象:

from django.core.paginator import Paginator

# in the view:
p = Paginator(objects, 2)
page = p.page(current_page)
for o in page.object_list:
# do processing
pass

您可以从请求的参数(例如 request.GET 中的 page 参数)获取 current_page 的值。

关于python - 仅处理 Django 中查询集的子集(并返回原​​始查询集),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11012454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com