0

我正在尝试在模型中使用多态表和非多态表之间的直通关系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期望 aChoiceBlank和 a被提出。ValueError相反,如果我将选项替换为ChoiceAthlete.

Django-polymorphic文档没有提到我的用例,它不受支持吗?有没有办法使这项工作?

4

1 回答 1

0

这似乎是不可能的。作为替代方案,由于我只需要一种使用 order 的类型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

于 2021-05-13T12:31:02.857 回答