【问题标题】:How can I query Django models with complex group-by query?如何使用复杂的分组查询来查询 Django 模型?
【发布时间】:2015-12-21 08:16:06
【问题描述】:

假设我有以下 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,
                ]
            )
        )

我想为a 的每个不同值找到MyModel 和最新created_ts 的实例。我可以用一个 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>,
}

【问题讨论】:

  • a 是另一个模型的外键吗?
  • 不,a 是一个整数。

标签: django django-models orm django-queryset


【解决方案1】:

如果您需要结果为 MyModel 对象,则无法在一个查询中执行此操作,但您可以获取字段 a 和最新的 create_ts 以及 django queryset values 方法:

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

【讨论】:

    猜你喜欢
    • 2021-06-08
    • 2020-03-29
    • 2020-04-04
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 2012-10-25
    相关资源
    最近更新 更多