繁体   English   中英

django 获取其他列值中最新的查询集

[英]django get queryset which is latest of other column value

我有一个带有一些列的 model,它们之间有 2 列:设备 ID(一个 CharField)和 date_saved(一个 DateTimeField)。
我有多行具有相同的设备 ID 但不同的 date_saved (每次用户保存记录时,我保存现在的日期时间)。
我想检索具有特定设备 ID 并且是最新保存的记录列表,即:
| 设备_id | 保存日期 |

| --- ----- | --------------------- -------- |

| 1061a | 2020 年 12 月 26 日 10:10:23|
| 1061a | 2020 年 12 月 26 日 10:11:52|
| 1061a | 2020 年 12 月 26 日 10:22:03|
| 1061a | 2020 年 12 月 26 日 10:31:15|
| 1062a | 2020 年 12 月 21 日 10:11:52|
| 1062a | 2020 年 12 月 25 日 10:22:03|
| 1073a | 2020 年 12 月 20 日 10:31:15|

Output:
| 1061a | 2020 年 12 月 26 日 10:31:15|
| 1062a | 2020 年 12 月 25 日 10:22:03|
| 1073a | 2020 年 12 月 20 日 10:31:15|

我尝试了各种方法但没有成功:

try:  
    progall=Program.objects.filter(equipment_id__startswith=str(b_id_to_search)).latest('saved_date')
  

该命令不起作用,程序转到 except 行

如果您使用的是 PostgreSQL ,则可以将 arguments 传递给queryset.distinct() ,以指定要在查询中返回不同值的字段。 您需要在此处正确使用order_by ,您应该按传递给distinct的字段排序,然后按第二个字段排序,以便您想要的记录位于首位(此处为'-saved_date' ,以便您获得每个equipment_id ID 的最新信息)

progall = Program.objects.filter(
    equipment_id__startswith=str(b_id_to_search)
).order_by=(
    'equipment_id',
    '-saved_date'
).distinct(
    'equipment_id'
)

Program.objects.filter(equipment_id__startswith=b_id_to_search).latest("saved_date")

这应该做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM