質問

ロードするDjangoビューがあります Member 特定のフィルターを使用したデータベースからのオブジェクト。

今、私はこのロジックを変更する必要があります 特定を提示します Member 最初に、そして残りを自然な順序で追跡させます.

最も簡単な方法は、クエリをすぐに実行し、リストを取得し、最初にアイテムを削除して挿入することです。しかし、私は最も興味があります まだ使用する方法がある場合 QuerySet怠zyな性質.

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 そして、使用します 怠zyなロードロジックオリジナル db.Members 使用済み.

DjangoとPythonで同じことをする方法はありますか?

役に立ちましたか?

解決

使用する itertools.chain. 。何かのようなもの:

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

チェーン関数はイテレーターを返します。 Iteratorは、最初のパラメーターのシーケンスから値を返すことから始めます。これは、特定の_memberを含むシングルエレメントリストです。次に、値の返品を開始します original_members, 、これが怠zyなシーケンスだと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top