Djangoで抽象クラスベースのオブジェクトを照会する方法と同様の問題がありました か? スレッドは、multi_table_inheritance の使用を提案しています。個人的には、 content_type を使用する方が概念的に快適だと思います (少なくとも私にとっては、より論理に近いと感じます)。
前のリンクの例を使用して、StelarType を次のように追加します。
class StellarType(models.Model):
"""
Use ContentType so we have a single access to all types
"""
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
次に、これを抽象基本モデルに追加します
class StellarObject(BaseModel):
title = models.CharField(max_length=255)
description = models.TextField()
slug = models.SlugField(blank=True, null=True)
stellartype = generic.GenericForeignKey(StellarType)
class Meta:
abstract = True
StellarObject と StellarType の間で同期するには、post_save 信号を接続して、Planet または Star が作成されるたびに StellarType インスタンスを作成します。このようにして、StellarType を介して StellarObjects をクエリできます。それで、multi_table_inheritance の使用に対してこのアプローチを使用することの長所と短所は何ですか? どちらもデータベースに追加のテーブルを作成すると思います。しかし、データベースのパフォーマンスはどうですか? 使いやすさ/柔軟性はどうですか?ご意見をお寄せいただきありがとうございます。