eug*_*ene 4 django database-design model
这并不是 django 特有的。
一罐模型
Place (with location, name, and other common attributes)
 - Restaurant  (menu..)
 - ConcertHall  (hall size..)
《Two scoops of Django 1.8》一书的作者强烈建议不要使用多表继承。
假设您想根据位置查询地点并对结果进行分页(它不必是位置,可以是我们要过滤的任何其他常见属性)
我可以看到如何使用多表继承来实现它。
select place.id from place LEFT OUTER JOIN "restaurant" on (restuarant.id=place.id) LEFT OUTER JOIN "concerthall" on (concerthall.id=place.id) where ... 按距离排序
用抽象继承来实现可行吗?
您必须做出的唯一决定是您是否希望父模型本身成为模型(具有自己的数据库表),或者父模型是否只是仅通过子模型可见的公共信息的持有者。
我认为这两种可能性都只是工具,同样是好的工具,这仅取决于您的用例是否合适。当然,这两种方法都需要考虑特定的事情,并且从概念上讲,有时多表继承可能更难以理解,但除此之外,这个主题就会变得固执己见。
如果您的两个模型都需要一个查询集,那么您考虑多表继承而不是抽象模型是合乎逻辑的,因为否则您将需要将两个查询集合并为一个,最有可能通过使用列表(如此相关答案所示) ,但是你肯定会失去 ORM 功能。
| 归档时间: | 
 | 
| 查看次数: | 2423 次 | 
| 最近记录: |