2011年02月24日

Djangoで複数のQuerySetをマージする方法。(ORサーチの仕方)

gaeを使って「OR」サーチをするのは不可能
検索条件を個々に発行して、結果をリスト化し、マージするのがせいぜい。
ソートがある場合はその後にしなければならず、GAEはクソの骨頂w

ただし、djangoとitertoolというパッケージを使用すれば結果をマージした後に半自動的にソートも出来るようになる。

例えば、
page_list = Page.objects.filter(...)
article_list = Page.objects.filter(...)
post_list = Page.objects.filter(...)
という三つのquerysetを作成したとする。

この二つのquerysetをマージしたい場合は、
from itertools import chain
result_list = list(chain(page_list, article_list, post_list))

更に、ソートしたい場合は、
result_list = sorted(
chain(page_list, article_list, post_list),
key=lambda instance: instance.date_created)

python2.4以降の場合は
from operator import attrgetter
result_list = sorted(
chain(page_list, article_list, post_list),
key=attrgetter('date_created'))

としてマージと同時にソートも出来てしまう!!

…らしいw
他にする仕事があって確認出来てない(汗
でも、特にインストールするもの追加するソースも無く、ノーマルの状態で出来るので大丈夫だと思われる。

ソース

以上!
ラベル:Python Django queryset GAE
posted by 1.618 at 19:31| Comment(0) | python | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。