【问题标题】:Django: Grab a set of objects from ID list (and sort by timestamp)Django:从 ID 列表中获取一组对象(并按时间戳排序)
【发布时间】: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 中?

谢谢,

【问题讨论】:

    标签: python database django model django-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 我在这里找到了一个返回查询集的绝妙答案:stackoverflow.com/a/37648265/1526703
    【解决方案2】:

    尝试以下方法:

    result = Model.objects.filter(id__in=object_ids)
    

    这将返回在给定的object_ids 列表中具有id 的所有Model 对象。这样,您也不需要将其他模型附加到生成的 QuerySet。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      • 1970-01-01
      • 2020-03-23
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多