2016-11-17 123 views
0

Django文檔說你可以在任何一方的模型中放置多對多的字段,但不能同時添加兩者。比薩餅和澆頭的例子說,想想比薩上的配料比想到哪種比薩更加「正常」,所以把比薩放在比薩模型中。好吧...兩個表中的Django ManyToMany字段

但是,在我的追蹤權限和組的應用程序中,這不一定是正確的。該應用程序在許可權表中具有多對多顯示哪些組具有該權限。它也似乎你應該能夠看看一個組,並看看它有什麼權限。這在理論上會使用相同的連接表。

無法在組模型中添加多對多字段並指定現有的permission_group連接表?這是否會導致問題,因爲它直接違反了ManyToMany文檔中的建議?

謝謝...

+0

我很困惑,如果看到每個組擁有哪個權限就是你需要的,爲什麼不使用Goups.permission_set.all()? –

+0

感謝您的評論帕特里克。請在下面查看我對Makaveli的回答。另外,在Django中我已經足夠新,我不知道在哪裏/如何使用您提供的建議。我會繼續找... – RMittelman

回答

1

我真的不能看到它的原因。觸摸電線的哪一端並不重要 - 最終結果是一樣的。在數據庫級別發生的情況與在Django中添加字段的位置完全相同。你仍然可以從兩側反向查找(看看文件約related_name設置,很方便),這樣你就可以同時獲得
一)與一些特定的權限
b)所有權限,用戶有

如果所有的人你嘗試你的建議,如果Django允許的話,你將最終得到兩個並行的M2M字段 - 我想它是這樣的,但這根本沒有任何意義。這就像在同一時間通過兩部手機同一個人說話 - 你爲什麼要那樣做?別。
正如帕特里克所說,Django擁有全面的權限系統,因此您可能只想檢查一下,也許它會滿足您的需求,而您根本無需付出任何努力。

+0

感謝您的回答。不得不考慮你們的人所說的話。我不明白你的比較。如果您提出特定的編輯權限,看到/更改具有該權限的組似乎是合理的。同上,如果你提出了一個特定的組編輯。從兩端添加或減去同一連接表似乎是合理的。有時你正在組織工作,有時候你正在處理權限。我真的很想理解這一點,所以我可以做到。 – RMittelman

1

你正在區分哪裏沒有。多對多的一點是它可以從關係的任何一方自動訪問; Django爲你做到這一點。文件所指的是,差異只是一種語義上的差異;在他們提到的情況下,澆頭屬於比薩餅。但即使這樣做,你仍然可以從每個頂部訪問比薩餅。

+1

現在我們正在某個地方。我想要做的就是在頂端放置一個ManyToManyThrough字段,這樣我就可以從任何一端添加或刪除關係。我知道你可以像上面提到的帕特里克那樣從任一端訪問,但是我希望每個表單上的MTM字段可以與連接表交互。很明顯,我必須使用「through」並提到已經存在的連接表,對吧? – RMittelman

+0

我也是Django的新手。所以我沒有答案。但我想說的是,你的問題很容易被忽視,並且完全合法。 Dajngo中的事物並不是對稱的,但它們在現實世界中應該是對稱的。 – mirek