次のようなモデルがありますが、これは大きくなりすぎており、別のアクティブなテーブルに分割する必要があります。1 日の終わりには、1 つのテーブルにはすべてのオブジェクトが含まれ、もう 1 つのテーブルにはアクティブなオブジェクトのみが含まれます。
class Tickets(models.Model):
price = ....
number = .....
date = ....
active = ....
parent = models.ForeignKey('self', related_name='children')
ManyMoreFields
複雑さの原因は 2 つあります。
1) ActiveTickets テーブルの親フィールドは Tickets テーブルを指します。related_name は変更しないでください。
2) ActiveTickets テーブルと Tickets テーブルの両方に、それらを継承するプロキシ モデルがあります。
class CityTickets(Tickets):
class Meta:
proxy = True
class ActiveCityTickets(ActiveTickets):
class Meta:
proxy = True
明らかに、Ticket のすべてのフィールド (多数あります) をコピーして貼り付けることができますが、それは正しい方法ではありません。Abstract 継承と Mixin を使用しようとしました (Ticket と ActiveTickets の両方に継承される別のクラスでフィールドを定義します)。
抽象継承の問題の 1 つは、ForeignKey フィールドである親が重複していて、 related_name が同じであるため、問題を引き起こしていることです。一般に、私の試みは、単体テストと機能テストが失敗する原因となっています。
ここでいくつかのエレガントなアプローチは何ですか? 2 つの別個の MySQL テーブルを作成し、単一のモデルを複数のマネージャー (および db ルーター) で使用することを検討する必要がありますか? それは合理的ですか?