我在 Django 中有一个通用列表视图,它返回大约 300 个对象(除非执行搜索)。
我将分页设置为仅显示 10 个对象。
所以我查询数据库,然后遍历对象,处理它们并在显示之前添加额外的值。我注意到所有 300 个对象都完成了处理,并且在处理后完成了分页。所以我只想对要显示的对象进行处理以提高性能。
我计算查询集中应该处理的对象的索引,第 1 页的 0-10、第 2 页的 11-20、第 3 页的 21-30 等。
现在我只想处理显示范围内的对象,但返回完整的查询集(因此类型视图按预期工作)。
最初我尝试过:
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 来说似乎相当 hacky 和不优雅。有没有更蟒蛇的方式来做到这一点?