2011-07-06 17 views
0

から選択する。Djangoクエリセットの方法は、SQLテーブル関数

私はDjango 1.3とPostgres 9.0で動作します。私はいくつかの余分なフィールドを持つ単純なモデルテーブルの検索を拡張する非常に複雑なSQLクエリを持っています。そして、それはパラメータ化されているので、テーブル関数でラップされます。
Rawクエリの助けを借りて動作するようになる1ヶ月前、RawQuerySetには本当に必要な機能(filter、count()メソッド、chainability)が不足しています。
アイディアはシンプルに見えます。私はこれを行う必要があるのに対し、

SELECT "table"."field1", ... ,"table"."fieldN" FROM "table" 

:クエリセットは、私はこのクエリを実行することができます

SELECT "table"."field1", ... ,"table"."fieldN" FROM proxy(param1, param2) 

そうです質問:どのように私はこれを行うことができますか?私はすでにカスタムマネージャを作成し始めましたが、model.db_tableをカスタム文字列で置き換えることはできません(クォートされ、データベースが関数呼び出しを認識するために停止するため)。
テーブルを関数に置き換える方法がない場合、私はRawQuerySetからクエリーセットを作成できるかどうかを知りたいと思います(クリーンなソリューションではありませんが、シンプルなRawQuerySetは、

答えて

1

効率的な目的でRaw SQLを使用したいがモデル・メソッドにアクセスする必要がある場合は、SQLのどのフィールドをどのモデルの列にするかをマップするライブラリが必要です。

そしてそのライブラリは、Unjoinify

+0

ええ、OKです。これは簡単に見えますが、SQLの出力をモデルインスタンスにマッピングするのに問題はありません。私が必要とするのは、RawQuerySetでQuerySet機能を使用することです。そして、私が使うことができるものを見つけました:[クエリーセットのように突き刺す方法](http://ramenlabs.com/2010/12/08/how-to-quack-like-a-queryset/)。この手法に関する意見はありますか? – gorodechnyj

+0

興味深い。しかし、とにかくカスタムSQLを作成しているのであれば、なぜフィルタを使用して除外しますか?ユースケースは何ですか? –

+0

私はいくつかの商品を持っていて、これらの商品は多くの店で売られているとしましょう。私の機能では、私は最高のオファーを提供し、最小限の価格で提供しています...このすべてのデータは、製品リストを取得した後に、製品ごとに10の追加のデータベースコールを作成するよりも速いシングルSQLで取得できます。 これは単なる製品リストなので、.filter(manufacturer_id__in = [13,3564])を作成してフィルタを適用できます。 – gorodechnyj

関連する問題