【发布时间】:2015-12-14 16:58:53
【问题描述】:
假设我有以下 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>,
}
【问题讨论】:
-
你使用什么数据库后端? MySQL 不支持按字段区分(PostgreSQL 确实支持)。据我所知,不使用原始 SQL 就没有“直截了当”的方式来做你想做的事。
-
后端是mysql。是的,它不支持“按字段区分”。解决方法是什么?如有必要,我宁愿执行多个查询而不是编写原始 SQL。
标签: python mysql django django-queryset