2012-01-11 12 views
1

少しの背景...カスタムsqlのDjangoモデル

私はカスタム認証バックエンドを作成し、ユーザーモデルを拡張しようとしています。 ORMは、無効なSQLを生成している、何らかの理由で

blog post by Scott Barnham

:私はブループリントとして以下を使用しています。内部結合を自分自身に戻したいと思われるが、結合のためにuser_ptr_idという名前のフィールドが見つからないため、失敗する。

これを検索すると、唯一のものではないようです。そして、実際には、上記のブログ記事のコメントでこれを参照しています。しかし、私はそれを修正するように見えることはできません。

生成されるSQLをオーバーライドできるはずです。あれは正しいですか?私が知ることから、私はカスタムObject Managerでこれを行うかもしれないようです。正しい?

しかし、私がしたいことの良い例を見つけることができないようです。私が見ているものはすべて、それらを継承して連鎖したいと思っています。それは本当に私がやりたいことではありません。私はちょうどのような何かを言いたいの並べ替え:

ちょっとDjango!選択すると、このSQL文が使用されます。 etc

これは可能ですか?多分、私の「グーグリン」は今日オフですが、私はそれを見つけることができません。それは間違った言葉や何かを使っていると私に信じさせる。

はご注意:私は、Python 2.6.5とPostgreSQL 9.1

+1

助けを得るためには、作業中のコード(モデル、エラーを生成するコード、逐語エラーメッセージ)を表示することをお勧めします。 – sgallen

答えて

0

デビッドとDjangoの1.3.1を使用しています、

はい、あなたがオーバーライドマネージャを実装することにより、モデルの動作をオーバーライドすることができますオブジェクト。私はA Django Model Manager for Soft Deleting RecordsのGreg Allardの素晴らしいブログを見つけました。これはソフト削除を実行し、deletedをTrue/Falseに設定し、削除されていないオブジェクトまたは削除されたオブジェクトだけを表示します。

これを念頭に置いて、オブジェクトのall()またはfilter()メソッドをオーバーライドして、必要なものを得ることができると思います。さて、私がポインタを使用するたびに、 "ptr"はフィールドの名前で明白です。クラス継承のためです。たとえば、class Animal():...,class Man(Animal):のようになります。Manは、Animalの拡張またはサブクラスです。データベースでは、Manテーブルにはanimal_ptr_idがあり、動物テーブルのタプルは、ANIMALフィールドとMANフィールドがJOINされたManとしてそのIDで "拡張"されます。

+0

ありがとうございました! –