2011-01-14 103 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类的引用,也不要实例化它们)。

基本模型类应该是仅扩展的(有点像其他语言中的抽象类)。