我有一个模型,它的 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 - 查询所有行并返回每个重复项中的最新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4008834/