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

标签 django model filter unique

我有一个模型,它的 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/

相关文章:

python - django login_required 装饰器,即使在登录后也总是重定向到登录页面

c++ - 使用模型作为 QMenu 的源

image-processing - LoG(高斯拉普拉斯)滤波器、一阶和二阶导数高斯滤波器有什么区别?

android - 如何使用 CursorWrapper 过滤 Cursor 行

ios - swift 3 通过字典中键的字符串值过滤字典数组

python - 您如何在 Geraldo Reports 中生成/创建表格?

python - 字段 'id' 需要一个数字但得到了 'natsu' django

python - GridSearch 中的 Best_params

python - 属性错误: module 'django.db.models' has no attribute 'ManyToMany'

python - Django DB 模型 F 组合表达式