【问题标题】:how to add two fields as foreign key to a table?如何将两个字段作为外键添加到表中?
【发布时间】:2020-02-20 01:05:12
【问题描述】:

我有两个表“团队”和“比赛”。每支球队都可以参加不同的比赛,每场比赛都包含两支或更多支球队,所以这是多对多关系。 这是我的比赛模型:

class Match(models.Model):
    result = models.CharField(max_length=10, default='')
    winner = models.??????
    team = models.ManyToManyField(Team, related_name='team')
    referee = models.ForeignKey(User, on_delete=models.PROTECT, 
        related_name='referee')

每场比赛的获胜者也是一个团队,但我不知道如何处理。我应该将其定义为团队表的外键吗?什么是正确的方法?

【问题讨论】:

    标签: django database django-models database-design


    【解决方案1】:

    related_name 参数指定中间表的反向关系,使用:

    winner = models.ForeignKey(Team, related_name='winning_team')
    

    编辑:Nico 实际上将related_name 命名在逻辑上更好,因为可以从team 对象访问matches_won。

    【讨论】:

    • ManyToManyField 在这里不正确,因为它是 ManyToOne 关系。 ForeignKey 是要走的路
    【解决方案2】:

    使用ForeignKey

    winner = models.ForeignKey(Team, related_name='matches_won')
    

    【讨论】:

    • 所以详细说明一下,OP获胜者是多对一的关系,所以需要一个简单的外键关系来存储获胜队伍。 related_name 有助于指定如何从team 对象访问match 对象
    猜你喜欢
    • 2019-11-23
    • 2019-08-10
    • 2021-02-12
    • 2015-09-21
    • 1970-01-01
    • 2010-11-05
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多