我很難決定多表繼承與抽象基本模型。比方說,我有一個Django項目模型的負載,說...Django模型繼承與抽象基本模型
視頻,文檔,圖片,並加載更多。
他們將共享一些常見的領域和功能塊。例如,我可能想要顯示混合了所有類型的最新20個項目的列表,並且用戶可以對這些內容類型中的任何一個進行評分或標記,或者用戶可以擁有自己的列表,其中將包括多種內容類型。
事情是這樣的:
BaseItem
- added
- updated
- tags
- ratings
Video(BaseItem)
Document(BaseItem)
Person(BaseItem)
我想知道如果這是使用多表繼承,或者我應該簡單地用一個抽象基類一個很好的案例。
1 - 使用多表繼承。
因此,這意味着我可以輕鬆查詢和顯示所有類型的最新20項。我可以使用django-model-utils中的InheritenceManager類來獲取需要的正確類型。我毫無疑問需要小心使用select_related,並在檢索項目時關注我的查詢計數。
2 - 使用抽象基類。
這看起來好像知道到底發生了什麼會更簡單,並且在查詢單個內容類型時,它可以節省JOIN對一張非常大的表格,但是我想我無法合併數據庫級別的類型等需要在Python中這樣做,這感覺就像一個騙局。我還需要我的標記模型使用GFK來將多種類型而不是FK僅用於BaseItem。
多表繼承感覺它應該從某種純度立場來看是正確的,但我看到有人建議儘可能避免它。在我的情況下,我覺得好像我不確定額外的JOIN和潛在的能力,因爲缺少select_related調用而在腳中自我拍攝會是值得的,而且我也覺得我並不是很清楚在哪裏這可能會在未來造成問題。
任何想法將會是更好的選擇,爲什麼或者在哪裏我可以找到更多關於折衷的討論?
謝謝!