假设我在一个遗留但仍处于活动状态的数据库中有三个表(duck、Goose 和 Rooster)。有一个第 3 方应用程序拥有此架构并定期添加/更新/删除条目,我具有只读访问权限。Duck、Goose 和 Rooster 中的 PK 保证是唯一的,即使在桌子之间也是如此。
我想要一个超级类(Bird),我可以将它用作这三个表中任何一个的 ForeignKey。
这是我卡住的地方:
- 我无法创建 Duck、Goose 和 Rooster 继承的抽象类,因为 django 不支持 ForeignKeys 到抽象类
- 我无法创建一个完全填充的 Bird 模型,除非我想在每次发生变化时从子类中复制相关数据(无数的时间问题)
- 我无法将 Duck、Goose 和 Rooster 表更改为单个表,因为它是其他应用程序的活动模式
在这一点上,我最好的解决方案是使用 Bird 抽象类,但忽略 Django API。而不是使用 ForeignKey 来鸟,我只包括唯一的 PK。每当我需要实际对象时,我会使用一些辅助函数,例如检查所有三个子类的“getBirdByPK()”。
这是非常不符合 Python 的,我不喜欢辅助函数需要了解每个子类。
有更好的建议吗?