这并不是 django 特有的。
一罐模型
Place (with location, name, and other common attributes)
- Restaurant (menu..)
- ConcertHall (hall size..)
- 在两个单独的表中,让每个表保存它们需要的所有字段。 (在django世界中,这称为抽象继承)
- 在三个表中,其中一个包含公共字段,另外两个有自己的唯一字段。 (django中的多表继承)
本书作者强烈建议不要使用多表继承。
假设您想根据位置查询地点并对结果进行分页(它不必是位置,可以是我们要过滤的任何其他常见属性)
我可以看到如何使用多表继承来实现它。
从地点 LEFT OUTER JOIN“餐厅”中选择 (
restuarant.id=place.id) LEFT OUTER JOIN “音乐厅” on (
Concerthall.id=place.id) 其中...按距离排序
用抽象继承来实现可行吗?
根据Django 文档:模型继承 https://docs.djangoproject.com/en/1.8/topics/db/models/#model-inheritance:
您必须做出的唯一决定是您是否希望父模型本身成为模型(具有自己的数据库表),或者父模型是否只是仅通过子模型可见的公共信息的持有者。
我认为这两种可能性都只是工具,同样是好的工具,这仅取决于您的用例是否合适。当然,这两种方法都需要考虑特定的事情,并且从概念上讲,有时多表继承可能更难以理解,但除此之外,这个主题就会变得固执己见。
如果两个模型都需要一个查询集,那么您考虑多表继承而不是抽象模型是合乎逻辑的,因为否则您将需要将两个查询集合并为一个,最有可能通过使用列表来实现相关答案 https://stackoverflow.com/questions/431628/how-to-combine-2-or-more-querysets-in-a-django-view建议,但你肯定会失去 ORM 功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)