私のモデルの多くは、「会社」モデルへの外部キーを持っています。ログインしているすべてのユーザーは、1 つ以上の会社に所属できます (User m2m Company、null 以外)。
現在の管理者ユーザーに、「現在の」会社を切り替えることができる管理者インデックス ページまたはベース ヘッダーの選択リストなど、「会社ゴーグル」をオンにしてもらいたいと思います。これを行うと、他のフィルターに加えて、Company への外部キーを持つモデルに対して、「company equals」フィルターが自動的に適用されます。
これを達成するための最良の方法は何ですか?
注意: これは管理インターフェイスの快適な機能として意図されています。この段階では、モデルを実際に保護する必要はありません (クライアント ビューには必要ですが、カスタム マネージャーを使用して、そこで request.user を介してルックアップすることができます)。
私の現在の考えは次のとおりです。
現在の会社をセッションに保存します。
ミドルウェアを使用してセッションから現在の会社を検索し、関連するすべてのリンクに会社を追加します。
a) change_list: (?/&)"company__eq=42"
b) Company への外部キーを持つモデルの change_view "add?company=42"。
これには、モデルを見つけて外部キーの存在を確認するために、URL を反転またはパターン マッチングする必要がある場合があります (または、パフォーマンスを向上させるために事前にそのリストを準備する場合があります)。
各 ModelAdmin フォームに外部キー フィールドを含めますが、CSS を介して非表示にします。これにより、change_view add ("new") はリンクから事前設定された外部キー値を言及せずに含めます。
これは実行可能なアプローチだと思いますか?
http://code.djangoproject.com/ticket/10761が実装されていれば、request.session から現在の会社を読み取るカスタム クエリセットを指定するだけで済むと思います。代わりに、そのチケットを迅速に追跡する (= パッチを作成して送信する) ほうがよいでしょうか?
編集:または、それを必要とする/外部キーを持つすべてのModelAdminでqueryset()メソッドを再定義するだけですか?