Django视图中合并多模型查询结果后按created_at排序方法
按日期字段排序字典列表的解决方案
嘿,这个需求很好解决,用Python内置的sorted()函数就能轻松搞定!你已经把不同模型的数据合并成字典列表了,接下来只需要指定排序依据为created_at字段就行。
方法一:使用lambda表达式(直观易读)
直接给sorted()函数传入key参数,用lambda提取每个字典里的created_at值作为排序依据:
# 假设你的合并后列表叫 merged_data sorted_data = sorted(merged_data, key=lambda item: item['created_at'])
如果想要降序排序(最新的内容排在前面),只需要加上reverse=True参数:
sorted_data = sorted(merged_data, key=lambda item: item['created_at'], reverse=True)
方法二:使用operator.itemgetter(性能更优)
如果你的数据量比较大,用operator模块里的itemgetter会比lambda稍微高效一点,先导入模块再使用:
from operator import itemgetter sorted_data = sorted(merged_data, key=itemgetter('created_at')) # 降序排序同样加reverse=True sorted_data = sorted(merged_data, key=itemgetter('created_at'), reverse=True)
额外小提示
如果你的几个模型结构比较相似,其实可以考虑在Django数据库查询阶段就用union合并查询集,然后直接用.order_by('created_at')或者.order_by('-created_at')排序——数据库层面处理会更高效。不过既然你已经完成了字典列表的合并,上面的方法完全能满足需求~
内容的提问来源于stack exchange,提问作者R.J. Jackson
相关产品推荐
相关产品推荐

