如何解决通过关系使用 Django 多态模型
我正在尝试通过 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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。