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



