通过使用 Django 多态模型的关系

Through relationship using Django polymorphic model

我正在尝试在 RankedAthlete 模型中使用多态和非多态 table 之间的直通关系:

class ChoiceBlank(PolymorphicModel):
    pass

class ChoiceAthlete(ChoiceBlank):
    choice = models.ForeignKey('SomeModel', on_delete=models.CASCADE)

class BetMultiple(models.Model):
    answer = models.ManyToManyField('ChoiceBlank', blank=True, through='RankedAthlete')

class RankedAthlete(models.Model):
    choiceAthlete = models.ForeignKey('ChoiceBlank', on_delete=models.CASCADE)
    bet = models.ForeignKey('BetMultiple', on_delete=models.CASCADE)
    rank = models.IntegerField()

这不起作用,因为 RankedAthlete 需要一个 ChoiceBlank 并且在我创建一个时会引发 ValueError。相反,如果我将 choice 替换为 ChoiceAthlete.

,我将无法迁移我的数据库

Django-polymorphic 文档没有提到我的用例,它不受支持吗?有什么办法可以做到这一点吗?

这似乎是不可能的。 作为替代方案,由于我只需要一种使用有序 answer 的类型,我使用子模型而不是父模型专门为其创建了一个模型,并相应地更改了 RankedAthlete

class BetMultipleOrdered(models.Model):
    answer = models.ManyToManyField('ChoiceAthlete', blank=True, through='RankedAthlete')

class RankedAthlete(models.Model):
    choiceAthlete = models.ForeignKey('ChoiceAthlete', on_delete=models.CASCADE)
    bet = models.ForeignKey('BetMultiple', on_delete=models.CASCADE)
    rank = models.IntegerField()

另一种选择是使用 ContentType