在一个循环中连接Django QuerySets正确的事情要做什么?

时间:2009-08-06 17:06:33

标签: django django-queryset

我有一个名为Collection的Django模型,它表示一组项目(CollectionItem)。每个集合仅包含特定类型的项目。 (CollectionItem具有Collection的外键)。

我希望获取特定类型的公共标记列表中的所有CollectionItem,并返回按特定字段排序的它们。这是我使用的查询代码:

lists = Collection.objects.filter(is_public=True, type=7)
items = CollectionItem.objects.none()
for list in lists:
    items |= CollectionItem.objects.filter(collection=list)
items = items.order_by('name')

我必须想象,当我拥有一个包含大量列表和项目的大型数据库时,这根本无法很好地扩展。在Django中有更好的方法吗?或者与其他我不应该担心的选项相比,查询循环中涉及的低效率是否可以忽略不计?

1 个答案:

答案 0 :(得分:8)

听起来你只需要:

items = CollectionItem.objects.filter(
                    collection__is_public=True, collection__type=7
               ).order_by('name')