2009-08-20 19 views
0

私は多くの異なるフィールドを持つアイテムを含むモデルを持っています。 m2m-relationを使用して、このフィールドのセットを各ユーザーに割り当てるもう1つのモデルがあります。Djangoのユーザー固有のモデル

結局のところ、すべてのユーザーはアイテムモデルの定義済みのフィールドセットにアクセスでき、これらのフィールドはビューでしか表示されず、これらのフィールドのみを編集することができます。 ありますかこれを設定する一般的な方法?

+0

基本的に、3つのエンティティ/モデル/テーブルがあります。Item-MapItemUser-User?また、MapItemUserをフィルターとして機能させたいので、各ユーザーはItemの一部しか表示しませんが、正しいですか?フィルタを完全に動的にするか、または同じフィールドセットを常に見ることができる固定タイプのユーザー(ロール)などがありますか? –

答えて

0

これを行う1つの方法は、Itemモデルをユーザーに個別に割り当て可能な部分に分割することです。同じフィールドセットを常に見ることができる固定のユーザータイプ(管理者、顧客、チームなど)がある場合、これらの部分はフィールドのグループ全体になります。非常にダイナミックで、ユーザーごとに個別のフィールドを設定できるようにするには、各フィールドは独自のフィールドの一部です。

このようにして、パートが参照できるIDだけで構成されるメタアイテムが作成されます。これは、部品を一緒に保持します。次に、ユーザーをアイテムではなく、パーツにマッピングし、パーツの共通IDからアイテムビューを再構築します。

+0

遅れて申し訳ありません、答えに感謝します。このシナリオはむしろ単純です。アイテムモデルには可能なフィールドがたくさんあり、各ユーザーはこれらの小さなセットにしかアクセスできません。私はこれを一般化するために(ビューではなく)ダイモデルで実装しなければならないと思います。このようなフィルタをどのように構築しますか? – schneck

0

第2のアプローチは、モデルレイヤにフィルタリングを含まないことです。 I.つまり、モデルレイヤーにマッピングをそのまま残して、各ユーザーのアイテムフィールドの完全なセットを取得します。次に、ルールを実装するフィルタにアイテムを渡します。

どのアプローチを選ぶかは、どのようにフィルタリングするかによって異なります。それが固定タイプのユーザーの場合は、ルールベースのポストプロセッサを実装することになります。非常に動的な場合は、earlier answerからアプローチを提案します。フィルタリングルールをモデルに追加する別の理由は、フィルタエンジンを再利用できなかったアプリケーションでモデルを再利用する場合です(たとえば、異なる言語のアプリケーションが同じデータベースを共有している場合など)。

関連する問題