Django ORM从表group by(field2)中选择max(field1);

时间:2015-10-20 14:19:43

标签: python mysql django django-orm

我有以下型号:

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语句?

1 个答案:

答案 0 :(得分:1)

此查询应该适合您

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

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