在数据结构中查找每个相关对象的最新条目的最佳方法是什么?我有一个Django模型,比如:
class OtherThing(models.Model):
pass
class Thing(models.Model):
buddy = models.ForeignKey(OtherThing, related_name=things)
somedata = models.IntegerField()
我想为每个OtherThing
获取最新的Thing
。下面是一些缓慢而愚蠢的代码,可以得到我想要的结果:
latest_things = []
for other in OtherThing.models.iterator():
latest_things.append(other.things.latest())
然而,这一切都是在Python空间中完成的,并向数据库发出许多查询。我还尝试使用(PostGreSQL only)DISTINCT ON
。这似乎不符合“id”排序,这是我尝试获取最新的:
Thing.objects.order_by('buddy_id', '-id').distinct('buddy_id')
最初错误地输入为...distinct('id')
,感谢okm指出这一点。
如何为每个OtherThing
找到最新的Thing
,最好是让数据库完成大部分工作?
如果您不关心排序(按OtherThing DESC而不是按Thing DESC),则以下代码可以正常工作:
如果这样做,可能需要使用
IN
查询或子查询或自连接编写.row()
,例如:相关问题 更多 >
编程相关推荐