レガシーであるがまだアクティブなデータベースに 3 つのテーブル (アヒル、グース、およびオンドリ) があるとします。このスキーマを所有し、定期的にエントリを追加/更新/削除するサードパーティ アプリケーションがあり、私は読み取り専用アクセス権を持っています。Duck、Goose、および Rooster の PK は、テーブル間でも一意であることが保証されています。
これら 3 つのテーブルのいずれかへの ForeignKey として使用できるスーパー クラス (Bird) が必要です。
これが私が立ち往生している場所です:
- django は抽象クラスへの ForeignKeys をサポートしていないため、Duck、Goose、および Rooster が継承する抽象クラスを作成できません。
- 変更があるたびにサブクラスから関連データを複製しない限り、完全に入力された Bird モデルを作成することはできません (無数のタイミングの問題)
- Duck、Goose、および Rooster のテーブルを 1 つのテーブルに変更できません。これは、他のアプリケーションのアクティブなスキーマであるためです。
この時点での最善の解決策は、Bird 抽象クラスを使用し、Django API を無視することです。バードウォッチングに ForeignKey を使用する代わりに、一意の PK を含めるだけです。実際のオブジェクトが必要なときはいつでも、3 つのサブクラスすべてをチェックする「getBirdByPK()」などのヘルパー関数を使用します。
これは非常に非 Pythonic であり、ヘルパー関数がすべてのサブクラスについて知る必要があるのは好きではありません。
より良い提案はありますか?