首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django中的多表继承。我不确定我是否明白

Django中的多表继承。我不确定我是否明白
EN

Stack Overflow用户
提问于 2011-09-29 13:47:06
回答 1查看 508关注 0票数 0

我不确定我是否理解多表继承…的优点/用途但这可能就是我要找的。我在和餐馆打交道。我目前的逻辑是,我有一个Company模型,它可能(但不总是)是一个餐厅。有时公司可以是“母公司”,在这种情况下,Company模型与Branch模型具有一对多关系。CompanyBranch模型都有共同的字段,例如街道地址、联系信息。如果公司只有一个“分支”,我可以假定它就是餐厅本身,因此我不需要将Branch对象附加到Company。这有意义吗?我知道我在用街道地址重复我自己...但是,如果我直接读取数据库,这似乎是一种存储数据的优雅方式。

我不确定多表继承是否是我所需要的。我只是不能仅仅看着https://docs.djangoproject.com/en/dev/topics/db/models/#multi-table-inheritance就能理解它。

编辑:也开放采取任何建议,更好的数据库布局,如果我做错了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-29 14:22:59

模型继承通常很有用,因为您可以执行Company.objects.all()这样的查询来返回所有公司(包括餐馆),还可以执行Restaurant.objects.all()来只返回餐馆公司。就像“常规”继承一样,在所有子模型(Restaurant)的父(Company)模型中包含公共字段可能会有所帮助。例如,所有公司可能都有address字段,但只有Restaurants可能有food_type字段。

我已经记录了一些实现“子类化查询集”的片段的链接,这些片段基本上可以让你进行像 Company.objects.all() 这样的查询,并让它返回给你像 [<Company> < Restaurant>, <Company> 这样的结果 、<公司>、<餐厅>]。 查看链接:

查看链接:

http://jazstudios.blogspot.com/2009/10/django-model-inheritance-with.html

这种多表方法的缺点是,它在查询中在Company父表和Restaurant子表之间引入了额外的联接。

另一种方法是创建一个抽象模型。这将为具有冗余字段的Company和Restaurant创建一个单独的表。对于多表继承,如果我们想要查找Restaurant实例上的address字段,我们将(在幕后)引用相关的Company模型。对于抽象继承,在Restaurant表中实际上会有一个address字段。此外,使用抽象继承,我认为您不能执行Company.objects.all()并期望它返回作为餐厅添加的实例,也不能使用上面链接的代码片段中的子类化查询集。

希望这能帮上忙,乔

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7592966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档