我想在两个值上过滤一个表格。其中第一个是现有版本的最高版本。首先,我从第一个模型中获得这两个值。
latest_versions = Version.objects.values('post').annotate(version=Max('version'))
这给了我一个词典列表,其中包含了最新版本的帖子名称。
[{name: xxx, version: 1.2}{name: yyy, version: 3.4}]
现在我想使用这个词典列表(latest_versions)作为另一个表的过滤器,该表包含名为 name 和 version 的列。
我认为这可行:
Post.objects.filter(**latest_versions)
但它没有,因为它是一个ValueQuerySet,一个字典列表。但是,如果我遍历ValueQuerySet它可以工作,但我必须为每个实例进行数据库调用。
for latest_version in latestversions:
r = Post.objects.filter(**latest_version)
result = result + list(r)
什么是Pythonic的方式?
提前致谢。
答案 0 :(得分:1)
您可能正在寻找Q对象:
from django.db.models import Q
...
filter_list = Q()
for item in latest_versions:
filter_list |= Q(item)
Post.objects.filter(filter_list)
filter_list
将是由'或'
https://docs.djangoproject.com/en/1.6/topics/db/queries/#complex-lookups-with-q-objects