SQL沒有「數組」的概念 - 表中的每個字段都是原子的(包含單個值) - 所以如果你想要一個實體A
「擁有」許多(「數組」)另一個實體B
你需要(至少)兩個表(一個用於A
,另一個用於B
)以及這些表之間的關係。在這裏你可以有兩種關係:「一對多」和「多對多」。
如果B
一個實例只能屬於A
一個實例 - 例如像在Book
- 你的情況>Page
關係,其中一個Page
屬於一個Book
(明顯),你有一個「一對(一個Book
有一個或多個Page
,Page
屬於一個單一的Book
)。在數據庫級,這通過0表具有指向它所屬的book
的主鍵的外鍵字段來實現。在Django模型中,這是使用models.ForeignKey()
field完成的。
如果A
實例有很多B
和B
一個實例可以屬於多個A
,你有一個多對多的關係。這可能是Book
- >Author
關係的情況(Author
寫入一個或多個Book
,而Book
由一個或多個Author
寫入。在數據庫級別,這是通過附加表實現的,該表將具有外鍵(通常是「唯一」的兩個鍵的約束,所以你不會將同一個作者關聯到同一本書)在Django中,這是通過使用models.ManyToManyField
來完成的該Book
或。(注:獨家「或」)Author
模型,Django會自行創建中間表
因此,對於你的榜樣,你將需要:
- 「書籍」的模式
- 一個「BibliographyItem」模式
- 「頁」模式與「周易」中的外鍵
- 一個「科」模型與「頁面」
外鍵
- 「圖像」模式
- 「視頻」模式
根據您是否希望能夠分享書籍之間或不相同BibliographyItem
,你要麼需要一個多對多字段或ForeignKey
在「Book
。在這種情況下(並且不知道更多關於您項目的要求),我寧願去尋求一種ManyToMany
關係(很可能有多本書會引用同一個項目)。
同樣的事情爲Image
和Video
,你可以選擇分段或不分段。
我強烈建議您閱讀關於關係數據庫建模和關係模型規範化的更多內容(並完成一些教程),以瞭解核心概念以及如何正確設計模型。 Django的ORM只是數據庫表和字段的一個簡單包裝,因此如果您希望做任何事情,您都需要了解數據庫級別的情況。
一個頁面是否可以出現在多本書中?似乎不太可能。同樣,一個部分是否可以出現在多個頁面中? – ChidG
你有這些錯誤的方式:頁面應該屬於一本書。這與教程中的問題和選擇完全相同,您應該閱讀。 –