【发布时间】:2011-02-19 19:34:07
【问题描述】:
这是我的简化模型:
class Item(models.Model):
pass
class TrackingPoint(models.Model):
item = models.ForeignKey(Item)
created = models.DateField()
data = models.IntegerField()
class Meta:
unique_together = ('item', 'created')
在我的应用程序的许多部分中,我需要检索一组Item 并使用data 字段从created 字段排序的每个项目的最新TrackingPoint 字段中注释每个项目。例如,Item 类的实例 i1 有 3 个 TrackingPoint 的:
tp1 = TrackingPoint(item=i1, created=date(2010,5,15), data=23)
tp2 = TrackingPoint(item=i1, created=date(2010,5,14), data=21)
tp3 = TrackingPoint(item=i1, created=date(2010,5,12), data=120)
我需要一个查询来检索带有tp1.data 字段值注释的i1 实例,因为tp1 是由created 字段排序的最新跟踪点。该查询还应该返回根本没有任何TrackingPoint 的Item。如果可能的话,我不想使用QuerySet 的extra 方法来做到这一点。
这就是我到目前为止所尝试的......但失败了:(
Item.objects.annotate(max_created=Max('trackingpoint__created'),
data=Avg('trackingpoint__data')).filter(trackingpoint__created=F('max_created'))
有什么想法吗?
【问题讨论】:
标签: python django orm django-orm django-aggregation