2つのクラスの共通属性を抽象基本クラスに分解しましたが、これらのクラスのいずれかを参照する必要がある別のモデルがあります。ABCには実際にはデータベーステーブルがないため、ABCを参照することはできません。
次の例は私の問題を説明するはずです:
class Answer(models.Model):
ovramt = models.ForeignKey("Ovramt")
question = models.ForeignKey("Question")
answer = models.CharField(max_length=3, choices=(("yes","yes"),("no","no") ("NA","N/A"))
likelihood = models.IntegerField(choices=LIKELY_CHOICES)
consequence = models.IntegerField(choices=CONSEQUENCE_CHOICES)
class Meta:
abstract = True
class Answer_A(Answer):
resident = models.ForeignKey("Resident")
def __unicode__(self):
return u"%s - %s - %s" %(self.ovramt.ssa.name, self.resident, self.question)
class Answer_B(Answer):
def __unicode__(self):
return u"%s - %s" %(self.ovramt.ssa.name, self.question)
class Answer_Risk(models.Model):
answer = models.ForeignKey("Answer")
risk = models.CharField(max_length=200)
def __unicode__(self):
return self.risk
Answer_AとAnswer_Bは、Answer_Aが別のテーブルとのFK関係も必要とするという点でわずかに異なります。Answer_Bは、後でいくつかの特定の属性を必要とする場合もあります。Answer_Bをスーパークラスにし、Answer_Aサブクラスを作成するか、それを作成した場合でも、問題は発生します。
「リスク」は、Answer_AでもAnswer_Bでも同じです。サブタイプに関係なく、「回答」を参照する必要がある他のモデルもあります。これはどのように行うことができますか?サブタイプに関係なく、どのようにタイプを参照できますか?
更新:
私は結合操作を避けようとしていましたが、それができるとは思いません。すべての「回答」で「居住者」への参照を持ち、必要に応じてそれを無効にすることは価値がありますか?それとも、それは非常に悪い習慣と見なされますか?