Django模型继承和关系

发布于 2024-10-12 09:36:47 字数 491 浏览 3 评论 0原文

我有一个 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 支持这个吗?如果支持的话,这样的事情会导致可扩展性问题吗?

谢谢!

I've got a django app, where I'd like to define a relationship between two classes at a base level. It also makes sense to me to define the relationship between the children of those base classes - so that I get something like this:

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')

Does django support this? and If it is supported, is something like this going to cause scalability problems?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

山川志 2024-10-19 09:36:47

是的,这是支持的。是的,它可能会导致性能问题。您应该阅读 Jacob 关于模型继承的文章: http://jacobian.org/writing/concrete-inheritance/< /a>

从1.0开始,Django支持的模型
遗产。这是一个很巧妙的功能,并且
可以大大有助于增加
建模选项的灵活性。

但是,模型继承还提供
一个非常好的机会
搬起石头砸自己的脚:混凝土
(多表)继承。如果你是
使用具体继承,Django
创建隐式连接回
几乎每个查询的父表。
这可能会彻底摧毁你的
数据库的性能。

Yes, this is supported. Yes, it can cause performance problems. You should read Jacob's post on model inheritance: http://jacobian.org/writing/concrete-inheritance/

Since 1.0, Django’s supported model
inheritance. It’s a neat feature, and
can go a long way towards increasing
flexibility in your modeling options.

However, model inheritance also offers
a really excellent opportunity to
shoot yourself in the foot: concrete
(multi-table) inheritance. If you’re
using concrete inheritance, Django
creates implicit joins back to the
parent table on nearly every query.
This can completely devastate your
database’s performance.

疯了 2024-10-19 09:36:47

它是受支持的,并且不会导致可扩展性问题。然而,我的建议是您只引用子类(即不要创建对基类的引用,也不要实例化它们)。

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

It is supported, and won't cause scalability problems. My advice, however, is that you only refer to the Child classes (i.e. don't create references to the Base classes, and don't instantiate them).

Base Model Classes should be extend-only (sort of like an Abstract Class in other languages).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文