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 列表中获取一组对象(并按时间戳排序)的主要内容,如果未能解决你的问题,请参考以下文章

从 django 中的一组对象中获取平均值

模板中的 Django 字典:从另一个对象属性中获取键

子查询 django 查询以从对象中获取最大的不同值并返回这些对象

如何使用 LINQ 从对象列表中获取唯一的属性列表?

django模型:获取id列表

从 Firebase 中的特定 ID 列表中检索数据,关注用户并仅获取他们的帖子