2016-11-17 29 views
0

Djangoのドキュメントでは、どちらのサイドのモデルにも多対多のフィールドを入れることができますが、両方を指定することはできません。ピザとトッピングを示す例では、トッピングがどのピザがオンになっているかを考えるよりも、ピザのトッピングを考えることが「普通」であるため、ピザモデルにフィールドを配置します。 OK ...両方のテーブルのDjango ManyToManyフィールド

しかし、アクセス許可とグループを追跡する私のアプリケーションでは、これは必ずしも真実ではありません。アプリケーションには、権限テーブルに多対多があり、どのグループにその権限があるかが示されます。グループを見てどのような権限があるかを確認できるようにも思えます。理論的には、同じ結合表を使用します。

グループモデルにmany-to-many-throughフィールドを追加して既存のpermission_group joinテーブルを指定できませんでしたか? ManyToManyのドキュメントの推奨事項に直接違反するので、これは問題を引き起こすでしょうか?

ありがとう...

+0

私は、各グループのアクセス許可が必要なのを見ると、Goups.permission_set.all()を使用してみませんか? –

+0

パトリックのコメントありがとう。私の答えは下記のMakaveliをご覧ください。また、私はあなたが与えた提案をどこでどのように使うべきか分からないので、Djangoで十分に新しくなっています。私は探し続けるよ... – RMittelman

答えて

1

私は本当にその理由を見ることはできません。電線のどの端に触れても問題はありません。最終結果は同じです。 Djangoでフィールドを追加する場所に関係なく、データベースレベルで起こることはまったく同じです。あなたはまだどちらかの側からの逆引き参照を行うことができます(ドキュメントに関するrelated_name設定をチェックし、それは便利です)ので、あなたは、両方の
a)は、いくつかの特定の権限
Bを持つすべての人の)すべての権限をユーザーが

の場合を持っていることを得ることができますあなたが提案したものを試してみると、Djangoがそれを許せば、2つの平行なM2Mフィールドに終わるでしょう - それは想像しますが、それはまったく意味がありません。それは同時に2つの携帯電話で同じ人と話すようなものです - なぜあなたはそれをしますか?しないでください。
Patrickが言及したように、Djangoには包括的な権限システムがありますので、あなたはそれをチェックしたいかもしれません。

+0

答えをありがとう。皆さんが言ったことを考えなければなりません。私はあなたの比較を理解していません。特定の編集権限を持っている場合は、どのグループにその権限があるかを確認/変更するのが妥当と思われます。あなたが編集のために特定のグループを立ち上げれば、同上。いずれかの端から同じ結合表に追加または削除することは合理的です。グループで作業している場合もあれば、許可を得ようとしていることもあります。私は本当にこれを理解したいので、それを正しく得ることができます。 – RMittelman

1

あなたは存在しないところを区別しています。多対多のポイントは、であることです。リレーションシップのどちらの側からでも自動的にアクセスできます。 Djangoはあなたのためにそれを行います。ドキュメントが作成していたポイントは、その違いは意味のあるものだということでした。彼らが言及する場合、トッピングはピザに属する。しかし、そのようにしても、各トッピングからピザにアクセスできます。

+1

今どこかに行ってきました。私が*好きなのは、トッピング側にManyToManyThroughフィールドを配置して、どちらかの端からリレーションシップを追加または削除できるようにすることです。私はあなたが上記のPatrickのようにどちらの側からでもアクセスできることを知っていますが、私はjoinテーブルとやりとりできる各フォームのMTMフィールドが必要です。明らかに、私は "スルー"を使用して、既に存在する結合テーブルに言及しなければならないでしょうか? – RMittelman

+0

私はDjangoも新しくなっています。だから私は答えがありません。しかし、私は、あなたの質問がうまくいかず、完全に合法であると言いたいと思います。 Dajngoでは対称的なものではありませんが、現実世界では対称的でなければなりません。 – mirek

関連する問題