Sco*_*ott 3 django model unique filter
嘿伙计们,我有一个不具有唯一身份的模特.每个型号也有一个日期.我想返回所有结果,但只返回共享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()
Run Code Online (Sandbox Code Playgroud)
现在尝试检索这些结果:
MyModel.objects.all()... # then limit duplicate my_id's by most recent
Run Code Online (Sandbox Code Playgroud)
结果应该只有m2和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)
Run Code Online (Sandbox Code Playgroud)
这是一些可以从数据库中获得所需内容的自定义SQL:
select * from mymodel where (id, date) in (select id, max(date) from mymodel group by id)
Run Code Online (Sandbox Code Playgroud)
您应该能够将其调整为在ORM中使用.
归档时间: |
|
查看次数: |
8905 次 |
最近记录: |