如何使用复杂的分组查询查询Django模型?

时间:2015-09-23 20:54:08

标签: django django-models orm django-queryset

假设我有以下Django类:

class MyModel(models.Model):
    a = models.IntegerField()
    created_ts = models.DateTimeField(default=datetime.utcnow, editable=False)

    def __str__(self):
        return "<%s %s>" % (
            self.__class__.__name__,
            "; ".join(
                [
                    "ID: %s" % self.pk,
                    "a: %s" % self.a,
                    "created_ts: %s" % self.created_ts,
                ]
            )
        )

我想为MyModel的每个不同值找到created_ts的最新a个实例。我可以使用一个QuerySet吗?如果是这样,那QuerySet是什么?如果没有,获得该结果的最有效方法是什么?

最后,我想拥有Integer / MyModel-Instance对。答案看起来应该是这样的:

{
    1: <MyModel ID: 1; a: 1; created_ts: 2004-11-08 06:01:00>,
    5: <MyModel ID: 2; a: 5; created_ts: 2004-11-05 08:01:32>,
    3: <MyModel ID: 3; a: 3; created_ts: 2004-11-04 11:01:42>,
    0: <MyModel ID: 4; a: 0; created_ts: 2004-11-03 06:12:10>,
}

1 个答案:

答案 0 :(得分:1)

如果您需要将结果作为MyModel个对象,则无法在一个查询中执行此操作,但您可以将django queryset {a和最新create_ts与{j} {3}}方法:

MyModel.objects.values('a').annotate(latest_date=Max('create_ts'))