您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在Django视图中合并两个或多个查询集?

如何在Django视图中合并两个或多个查询集?

查询集连接到列表是最简单的方法。如果无论如何将对所有查询集命中数据库(例如,由于需要对结果进行排序),则不会增加成本。

from itertools import chain
result_list = list(chain(page_list, article_list, post_list))

使用itertools.chainitertools在C中实现每个列表和一个元素一个一个地循环添加要快。与在串联之前将每个查询集转换为列表相比,它消耗的内存更少。

现在可以按日期对结果列表进行排序(按照hasen j对另一个答案的评论中的要求)。该sorted()函数方便地接受生成器并返回列表:

result_list = sorted(
    chain(page_list, article_list, post_list),
    key=lambda instance: instance.date_created)

如果你使用的是Python 2.4或更高版本,则可以使用attrgetter而不是lambda。我记得曾经读过关于它更快的文章,但是对于一百万个项目,我没有看到明显的速度差异。

from operator import attrgetter
result_list = sorted(
    chain(page_list, article_list, post_list),
    key=attrgetter('date_created'))
Go 2022/1/1 18:23:56 有329人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶