2

有一个 Django 视图,它Member使用特定的过滤器从数据库中加载对象。

现在我需要改变这个逻辑,先呈现一个特定Member的,然后让其余的顺其自然

最直接的方法是立即执行查询,获取列表,删除并在开头插入项目。但是我很好奇是否还有任何方法可以利用它QuerySet的懒惰性质

在 C# 中,我会写:

IEnumerable<Member> members = db.Members; // db.Members is lazy
members = Enumerable.Union( // construct a lazy sequence that traverses its arguments
    new [] { specificMember },
    members.Where(m => m != specificMember)
);

作为一个循环将通过members,它会首先得到specificMember,然后使用任何延迟加载逻辑原来db.Members使用

有没有办法在 Django 和 Python 中做同样的事情?

4

1 回答 1

6

使用itertools.chain. 就像是:

import itertools
original_members = .... # get an iterator of the data
members = itertools.chain([specific_member], original_members)

chain 函数返回一个迭代器。迭代器首先从第一个参数中的序列返回值,这是一个包含 specific_member 的单元素列表。然后它开始从 中返回值original_members,我认为这是一个惰性序列。

于 2011-06-15T22:33:20.337 回答