1

假设我在一个遗留但仍处于活动状态的数据库中有三个表(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 的,我不喜欢辅助函数需要了解每个子类。

有更好的建议吗?

4

1 回答 1

0

我不太了解您的用例,但听起来通用关系可能会对您有所帮助。

于 2012-05-31T16:00:46.920 回答