2013-02-09 241 views
0

哪個更適合在所有的模型繼承中使用?爲什麼?我不瞭解它,所以我想知道哪些更好或更有用,以便我知道我將用於該特定場景。模型繼承

  • 抽象基類
  • 多表繼承
  • 代理模式
+1

幾乎肯定取決於您的使用情況。你有一些背景嗎?多桌可以真正結束在腳下射擊你,所以我會確保這是必要的,然後再選擇這條路。 (繼承不能很好地與數據庫配合) – second 2013-02-09 09:59:32

+0

我正在讀一本書,他們定義了3個模型的繼承。如果我有這麼多領域,他們使用相同的,當然我會使用模型繼承。但在我的問題是你的opnion更好? – catherine 2013-02-09 10:02:44

+0

它仍然取決於你的用例。遺傳模型在多大程度上與相關,以及它們在多大程度上會有所不同?你想要能夠在基礎模型上執行查詢,還是隻需要在繼承模型上執行查詢? – Teisman 2013-02-09 11:00:26

回答

1

每種技術提供不同的好處。這真的取決於你需要做什麼。

最好的地方是閱讀model inheritance docs

抽象基類

使用這些,如果你只是想減少代碼編寫量。如果您知道有多個字段出現在衆多模型中,請編寫一個基類並繼承它。

多表繼承

,如果你想,可以進行查詢和操作上的具體基類這是有用的 - 例如Base.objects.all()有點像在同一個查詢集看到Child1.objects.all()Child2.objects.all()

代理模式

使用代理模式,如果所有字段在每個模型的相同。每個對象都有一個數據庫元組,但該數據元組可以用來表示父代或代理。這是非常強大的,而且幾乎可以肯定,如果你的領域是相同的,那就走。

+0

但是大多數開發者說使用多表繼承是一件壞事。但是,爲什麼他們將這添加爲模型繼承,如果這是不好的? – catherine 2013-02-09 12:02:12

+1

您真的需要一個用例,然後才能說出它是一個好還是差的解決方案。正如你正確地指出的那樣,如果django開發者沒有用,那麼他們就不會花時間去實現它。 – 2013-02-09 12:51:30

+0

你有點 – catherine 2013-02-09 13:01:33