ジャンゴの一般的な関係を使用して継承モデルをエミュレートしようとしています。これまでのところ、これは私が思いついたものです:
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するすべての作業を行ったのです。その一般的な関係を持つことで、カスケード削除が自動的に接続されます。これは私が望むものです (そして、他の方向から削除を接続する信号があります)。_basebasepost-delete
のサブクラスはいくつでも存在する可能性がありBase、気持ち悪いのは、_baseとそのカバー プロパティをコピーして貼り付けなければならないことです。また、これに対応するカスタム オブジェクト マネージャも用意しました。また、Base.
この共通機能をカプセル化して、サブクラスごとにコピーして貼り付ける必要がないようにする良い方法はありますか?