Настройка внешнего ключа для абстрактного базового класса с помощью Django

Я выделил общие атрибуты из двух классов в абстрактный базовый класс, однако у меня есть другая модель, которая должна ссылаться на один из этих классов. Невозможно ссылаться на 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. У меня также есть другие модели, которые должны ссылаться на «Ответ» независимо от его подтипа. Как это может быть сделано? Как вы можете ссылаться на тип независимо от его подтипа?

Обновить:
Я пытался избежать операции соединения, но не думаю, что смогу это сделать. Стоит ли упоминать «Резидент» во всех «Ответчиках» и просто обнулять их там, где это необходимо? Или это считается очень плохой практикой?

Ответы на вопрос(1)

Ваш ответ на вопрос