我已经将两个类的公共属性分解为一个抽象基类,但是我有另一个模型需要引用这些类中的任何一个。不可能引用 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,“风险”都是相同的。我还有其他模型需要引用“答案”,无论其子类型如何。如何才能做到这一点?不管它的子类型如何,你如何引用一个类型?
更新:
我试图避免加入操作,但我认为我做不到。是否值得在所有“答案”中引用“居民”并在需要时将其取消?或者这被认为是非常糟糕的做法?