Django模型过滤词典列表

时间:2014-07-28 11:38:10

标签: django list dictionary django-models filter

我想在两个值上过滤一个表格。其中第一个是现有版本的最高版本。首先,我从第一个模型中获得这两个值。

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的方式?

提前致谢。

1 个答案:

答案 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将是由'或'

分隔的Q对象列表

https://docs.djangoproject.com/en/1.6/topics/db/queries/#complex-lookups-with-q-objects