不完全是使用django orm或SQL的简单查询。我对它的第一个理解是,您可能已经做了很多事情;获取不同的产品和日期对,然后为每个产品和日期对执行单独的查询。
year_products = Product.objects.filter(year=2009)
product_date_pairs = year_products.values('product').distinct('product'
).annotate(Max('date'))
[Report.objects.get(product=p['product'], date=p['date__max'])
for p in product_date_pairs]
但是,您可以使用q操作符进一步,或者使用一些花哨的方法,将查询计数减少到2而不是n+1。
import operator
qs = [Q(product=p['product'], date=p['date__max']) for p in product_date_pairs]
ored_qs = reduce(operator.or_, qs)
Report.objects.filter(ored_qs)