django之查询所有行并返回每个重复项中的最新行

Free-Thinker 阅读:105 2025-06-02 22:19:02 评论:0

我有一个模型,它的 id 不是唯一的。每个型号还有一个日期。我想返回所有结果,但只返回共享 ID 的每一行中的最新结果。该模型看起来像这样:

class MyModel(models.Model): 
    my_id = models.PositiveIntegerField() 
    date  = models.DateTimeField() 
    title = models.CharField(max_length=36) 
 
 
## Add some entries 
m1 = MyModel(my_id=1, date=yesterday, title='stop') 
m1.save() 
 
m2 = MyModel(my_id=1, date=today, title='go') 
m2.save() 
 
m3 = MyModel(my_id=2, date=today, title='hello') 
m3.save() 
现在尝试检索这些结果:
MyModel.objects.all()... # then limit duplicate my_id's by most recent 
结果应该只有 平方米 m3

请您参考如下方法:

仅使用 ORM 无法做到这一点,您需要获取所有记录,然后在 Python 中丢弃重复项。

例如:

objs = MyModel.objects.all().order_by("-date") 
seen = set() 
keep = [] 
for o in objs: 
    if o.id not in seen: 
        keep.append(o) 
        seen.add(o.id) 

这是一些可以从数据库中获取所需内容的自定义 SQL:
select * from mymodel where (id, date) in (select id, max(date) from mymodel group by id) 

您应该能够调整它以在 ORM 中使用。


标签:Django
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号