问题描述
我正在尝试通过 RankedAthlete
模型使用多态表和非多态表之间的直通关系:
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
。相反,如果我将选择替换为 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。