django - 获取聚合中最大记录的 ID

标签 django django-orm django-aggregation

采用这些模型:

class Rocket(Model):
   ...

class Flight(Model):
   rocket = ForeignKey(Rocket)
   start_time = DateTimeField(...)

如果我想获得每枚火箭最近一次飞行的开始时间,那很简单:

>>> Flight.objects.values('rocket').annotate(max_start_time=Max('start_time'))
<QuerySet [
    {'rocket': 3, 'max_start_time': datetime.datetime(2019, 6, 13, 6, 58, 46, 299013, tzinfo=<UTC>)},
    {'rocket': 4, 'max_start_time': datetime.datetime(2019, 6, 13, 6, 59, 12, 759964, tzinfo=<UTC>)},
    ...]>

但是,如果我想选择那些相同航类的 ID 而不是 max_start_time 怎么办?

换句话说,我想获取每枚火箭的最新 Flight 的 ID。

最佳答案

您使用的是什么数据库后端?如果您的数据库后端支持 DISTINCT ON,这最容易通过以下方式实现:

Flight.objects.order_by("rocket", "-start_time").distinct("rocket").values("id", "rocket")

关于django - 获取聚合中最大记录的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57825546/

相关文章:

django - SESSION_COOKIE_HTTPONLY = True 在 Django : 中不起作用

python - + : 'RegexURLPattern' and 'unicode' 不受支持的操作数类型

python - 在 django 中显示来自 tweepy python 文件的数据

python - 如何使用Django获取用户的操作系统?

django - 如何对related_name 字段进行查询?

Django 在模型字段上注释 Avg

django - 两个字段之间的时间增量

django - django 中给定用户的 message_set

django - 在模板中显示外键上的Django values()作为对象而不是其ID

django - 如何过滤反向外键字段上的 Django 注释