Django:从 ID 列表中获取一组对象(并按时间戳排序)
Posted
技术标签:
【中文标题】Django:从 ID 列表中获取一组对象(并按时间戳排序)【英文标题】:Django: Grab a set of objects from ID list (and sort by timestamp) 【发布时间】:2012-04-08 09:52:43 【问题描述】:我有一个我需要抓取的对象的 ID 列表,然后我必须按它们的时间戳对它们进行排序。我打算这样做:
For i in object_ids:
instance = Model.objects.get(id = i)
# Append instance to list of instances
#sort the instances list
但有两件事困扰着我:
有没有办法通过 ID 列表获取条目集合 - 无需循环? 能否仅根据 ID 将任意对象附加到 QuerySet 中?谢谢,
【问题讨论】:
【参考方案1】:这可以使用这样的代码来完成:
objects = Model.objects.filter(id__in=object_ids).order_by('-timestamp')
order_by
可以是正数或负数timestamp
,具体取决于您希望它的排序方式。
【讨论】:
以与 object_ids 列表相同的顺序返回对象的最佳方法是什么? OP 代码? 我可能只用一次调用(如上面)从数据库中获取数据,然后在您的代码中进行排序。应该比查询数据库 N 次更快。尤其是 N 很大。 @kender @Chris 我们对in the same order as the object_ids list
有什么解决方案,而不是在获取后排序?
@Dipak 我在@kendor 的回答中检索了它们,将它们放入dict
id->object
,然后迭代object_ids
获取密钥。我没有测试性能,因为它并不重要。
@Dipak 我在这里找到了一个返回查询集的绝妙答案:***.com/a/37648265/1526703【参考方案2】:
尝试以下方法:
result = Model.objects.filter(id__in=object_ids)
这将返回在给定的object_ids
列表中具有id
的所有Model
对象。这样,您也不需要将其他模型附加到生成的 QuerySet。
【讨论】:
以上是关于Django:从 ID 列表中获取一组对象(并按时间戳排序)的主要内容,如果未能解决你的问题,请参考以下文章