2011-01-14 158 views
1

我有一個Django應用程序,我想在基本級別定義兩個類之間的關係。這也對我來說很有意義定義這些基類的子女之間的關係 - 讓我得到這樣的:Django模型的繼承和關係

class BaseSummary(models.Model): 
    base_types... 

class BaseDetail(models.Model): 
    base_detail_types... 
    base_summary = models.ForeignKey('BaseSummary') 

class ChildSummary(BaseSummary): 
    child_summary_types... 

class ChildDetail(BaseDetail): 
    child_detail_type... 
    child_summary = models.ForeignKey('ChildSummary') 

是否Django的支持呢?如果支持,是否會導致可伸縮性問題?

謝謝!

回答

5

是的,這是支持的。是的,它可能會導致性能問題。你應該閱讀模式的繼承雅各布的帖子:http://jacobian.org/writing/concrete-inheritance/

自1.0,Django的支持模型 繼承。這是一個很好的功能,並且 可以在建模選項中增加靈活性。

然而,模型的繼承還提供 一個真正極好的機會, 搬起石頭砸自己的腳:混凝土 (多表)繼承。如果您使用具體繼承 ,則Django 幾乎在每個查詢上都會創建隱式連接返回到 父表。 這可以完全破壞你的數據庫的性能。

0

它被支持,並且不會引起可伸縮性問題。然而,我的建議是,你只能引用Child類(即不要創建對Base類的引用,也不要實例化它們)。

基本模型類應該是僅擴展的(有點像其他語言中的抽象類)。