Django ORM for select max(field1) from table group by (field2);

Django ORM for select max(field1) from table group by (field2);

我有以下型号:

class Transition(models.Models):
  id = models.AutoField(primary_key=True)
  transition_type = models.IntegerField(dbcolumn='transition_typeid')
  instance = models.IntegerField(dbcolumn='instanceid')
  ts = models.DateTimeField()
  class Meta:
    managed=False
    db_table = 'transitions'

我想使用 Django 的 ORM 发出以下查询:

select max(id) from transitions group by(instanceid);

我知道我可以使用如下原始查询:

Transition.objects.raw('select max(id) from transitions group by (instanceid)')

但是,缺点是查询似乎是立即执行的,并且 不适合进一步过滤,例如我想查询 设置可以应用对说时间戳的进一步过滤器。

有没有办法在不使用 Django 的原始查询的情况下使用纯 ORM 方式发出上面的 select 语句?

这个查询应该适合你

Transition.objects.values('instance').annotate(Max('id'))

文档:https://docs.djangoproject.com/en/1.8/topics/db/aggregation/