ジャンゴの一般的な関係を使用して継承モデルをエミュレートしようとしています。これまでのところ、これは私が思いついたものです:
class Base(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
... other stuff
class Meta:
unique_together = ("content_type", "object_id")
class SubClass1(models.Model):
... properties for this class
_base = generic.GenericRelation(Base)
@property
def base(self):
return self._base.all()[0]
ここでわかることから (できれば、少なくとも)、 はSubClass1
と 1 対 1 の関係を持つ必要があります。そのため、そのフィールドを作成し、それをプロパティでカバーBase
するすべての作業を行ったのです。その一般的な関係を持つことで、カスケード削除が自動的に接続されます。これは私が望むものです (そして、他の方向から削除を接続する信号があります)。_base
base
post-delete
のサブクラスはいくつでも存在する可能性がありBase
、気持ち悪いのは、_base
とそのカバー プロパティをコピーして貼り付けなければならないことです。また、これに対応するカスタム オブジェクト マネージャも用意しました。また、Base
.
この共通機能をカプセル化して、サブクラスごとにコピーして貼り付ける必要がないようにする良い方法はありますか?