Django / Postgres Group By Aggregate

时间:2018-02-27 13:54:02

标签: python django postgresql django-models group-by

我对使用group by子句的查询有疑问。 让我们假设我有以下Django-Model:

class SomeModel(models.Model):
    date = models.DateField()
    value = models.FloatField()
    relation = models.ForeignKey('OtherModel')

如果我想进行查询,我通过OtherModel对SomeModel实例进行分组并注释最新日期:

SomeModel.objects.values('relation').annotate(Max('date'))

这一切都很棒,但只要我想在已注释的查询集上添加过滤器,我就无处可去:

SomeModel.objects.values('relation').annotate(Max('date')).filter(value__gt=0)

这确实会过滤掉所有值!= 0,但是我只想在注释发生后才想要它。如果关系的最新日期值为0,我希望将其过滤掉!

1 个答案:

答案 0 :(得分:0)

您需要在注释字段中添加值,然后您可以对其进行过滤。您的ORM查询变为

SomeModel.objects.values('relation').annotate(Max('date'), value=F('value')).filter(value__gt=0)

这应该给出你需要的价值