Django的聚合和额外值

时间:2010-07-05 19:59:03

标签: django orm aggregate

我的模型看起来像这样:

class MyModel(models.Model)
    value = models.DecimalField()
    date = models.DatetimeField()

我正在做这个请求:

MyModel.objects.aggregate(Min("value"))

我得到了预期的结果:

{"mymodel__min": the_actual_minimum_value}

但是,我无法找到一种方法同时获得最小值和相关日期(最小值出现的日期)。

Django ORM是否允许这样做,还是必须使用原始SQL?

1 个答案:

答案 0 :(得分:2)

您要做的是对查询进行注释,以便您恢复常规结果,但也会在结果中添加一些数据。所以:

MyModel.objects.annotate(Min("value"))

mymodel__min作为附加值返回正常结果

在回复您的评论时,我认为这就是您要找的内容?这将返回日期及其相应的最小值。

MyModel.objects.values('date').annotate(Min("value"))

编辑:在进一步回复您的评论时,您希望获得最低价值的条目,但也想要在结果中添加其他日期字段,您可以这样做:

MyModel.objects.values('date').annotate(min_value=Min('value')).order_by('min_value')[0] 

这将通过排序结果然后简单地获取始终为最低值的第一个索引来获得您要求的结果。 见more