【发布时间】:2018-03-24 18:34:37
【问题描述】:
我有 3 个相关模型:
Program(Model):
... # which aggregates ProgramVersions
ProgramVersion(Model):
program = ForeignKey(Program)
index = IntegerField()
UserProgramVersion(Model):
user = ForeignKey(User)
version = ForeignKey(ProgramVersion)
index = IntegerField()
ProgramVersion 和 UserProgramVersion 是基于 index 字段的可订购模型 - 表中具有最高 index 的对象被视为最新/最新对象(这由一些自定义逻辑处理,不相关)。
我想选择所有最新的 UserProgramVersion,即指向同一程序的最新 UPV。
这可以由这个 UserProgramVersion 查询集处理:
def latest_user_program_versions(self):
latest = self\
.order_by('version__program_id', '-version__index', '-index')\
.distinct('version__program_id')
return self.filter(id__in=latest)
这很好用,但是我正在寻找不使用 .distinct() 的解决方案 我试过这样的事情:
def latest_user_program_versions(self):
latest = self\
.annotate(
'max_version_index'=Max('version__index'),
'max_index'=Max('index'))\
.filter(
'version__index'=F('max_version_index'),
'index'=F('max_index'))
return self.filter(id__in=latest)
这不起作用
【问题讨论】:
-
我不相信没有用户过滤器或用户组过滤器“工作正常”。如果你现在省略它,你可能会得到一个以后无论如何都无法添加的答案。
标签: python django django-queryset django-orm