有关djoney对象的聚合查询

2024-10-01 15:41:17 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的简化模型:

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字段从最新的TrackingPoint字段中为每个项添加注释。例如,类Item的实例i1有3个TrackingPoint

^{pr2}$

我需要一个查询来检索用tp1.data字段值注释的i1实例,因为tp1created字段排序的最新跟踪点。该查询还应该返回Item,它根本没有TrackingPoint。如果可能的话,我不喜欢使用QuerySetextra方法来完成这项工作。在

到目前为止我一直在努力。。。失败了:(

Item.objects.annotate(max_created=Max('trackingpoint__created'),
                      data=Avg('trackingpoint__data')).filter(trackingpoint__created=F('max_created'))

有什么想法吗?在


Tags: 实例模型datamodelmodelspassitemmax
2条回答

这并不能直接回答您的问题,但万一不需要您所描述的内容,您可能会对最棒的每组解决方案感兴趣。你可以看看我对类似问题的回答:

Django Query That Get Most Recent Objects From Different Categories

这应该直接适用于您的案例:

 items = Item.objects.annotate(tracking_point_created=Max('trackingpoint__created')) 
 trackingpoints = TrackingPoint.objects.filter(created__in=[b.tracking_point_created for b in items])

请注意,如果created日期在TrackingPoint模型中重复,第二行可能会产生不明确的结果。在

下面是一个将提供(TrackingPoint,Item)对的查询:

TrackingPoint.objects.annotate(max=Max('item__trackingpoint__created')).filter(max=F('created')).select_related('item').order_by('created')

您必须查询没有单独跟踪点的项。在

相关问题 更多 >

    热门问题