Django:从ID列表中获取一组对象(并按时间戳排序)

Gor*_*oro 13 python database django model django-queryset

我有一个我需要抓取的对象的ID列表,然后我必须按时间戳对它们进行排序.这就是我要做的事情:

For i in object_ids:
  instance = Model.objects.get(id = i)
  # Append instance to list of instances 

#sort the instances list
Run Code Online (Sandbox Code Playgroud)

但有两件事让我困扰:

  • 是否无法通过其ID列表获取条目集合 - 无需循环?
  • 我可以根据它们的ID将任意对象附加到QuerySet吗?

谢谢,

ken*_*der 25

这可以使用这样的代码完成:

objects = Model.objects.filter(id__in=object_ids).order_by('-timestamp')
Run Code Online (Sandbox Code Playgroud)

order_by可正可负timestamp,这取决于你想要的排序.

  • 以与object_ids列表相同的顺序返回对象的最好方法是什么?OP代码? (4认同)
  • 我可能只用一次调用(如上所述)从数据库中获取数据,然后在代码中进行排序.应该更快,然后查询数据库N次.特别是大N. (2认同)

Sim*_*ser 8

请尝试以下方法:

result = Model.objects.filter(id__in=object_ids)
Run Code Online (Sandbox Code Playgroud)

这将返回在给定列表中Model包含它们的所有对象.这样,您也不需要将额外的模型附加到生成的QuerySet中.idobject_ids