如何使用复杂的分组查询查询 Django 模型?
How can I query Django models with complex group-by query?
假设我有以下 Django class:
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
的每个不同值找到具有最新 created_ts
的 MyModel
实例。我可以使用单个 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>,
}
如果您需要结果是 MyModel
个对象,则不能在一个查询中执行此操作,但您可以获取字段 a
和最新的 create_ts
以及 django queryset values
方法:
MyModel.objects.values('a').annotate(latest_date=Max('create_ts'))
假设我有以下 Django class:
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
的每个不同值找到具有最新 created_ts
的 MyModel
实例。我可以使用单个 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>,
}
如果您需要结果是 MyModel
个对象,则不能在一个查询中执行此操作,但您可以获取字段 a
和最新的 create_ts
以及 django queryset values
方法:
MyModel.objects.values('a').annotate(latest_date=Max('create_ts'))