这是我的结构的伪视图:
Offer [id, match]
- Odds [id, offer_id, time)
- Odds [id, offer_id, time)
- .....
要根据time
属性获取最新对象,我只需执行someOffer.latest()
。我的问题是在多个优惠上查询latest()
。我开始去[offer.odds.latest() for o in Offer.objects.filter....]
- 这显然是太多的查询,因此非常慢。然后我构建了这个查询
Odds.objects.annotate(max_time=Max('offer__odds__time')).filter(time=F('max_time'))
这要快得多。然而,在大量赔率(> 100,000)上,这是非常非常慢的。有没有人有一个很好的方法来获取所有“最新”的多个对象?
非常感谢,