【问题标题】:Establishing relationships between two models在两个模型之间建立关系
【发布时间】:2020-01-01 20:50:10
【问题描述】:

我正在创建一个足球统计应用程序,但在建立模型之间的关系时遇到了一些误解。我创建了两个模型。首先是具有以下字段的联盟

class League(models.Model):
    league_id = models.IntegerField(primary_key=True)
    country = models.CharField()
    country_code = models.CharField()

第二个国家模型具有以下字段。

class Country(models.Midel):
    country = models.CharField()
    country_code = models.CharField()

我需要在两个模型之间建立关系。根据我的数据库的逻辑,一个联赛行只能包含一个国家。数据库中的国家表不包含任何与之相关的联赛信息。在联赛表中,每一行都包含与联赛相关的国家/地区的信息。我认为我应该使用一对多的关系。我的想法对吗?

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    联赛应该有代码字段,但不是国家/地区。此外,该字段将是外键

    这是一些伪代码。您需要仔细检查语法、on_delete 内容、char 字段的最大长度等。

    class League(models.Model):
        league_id = models.IntegerField(primary_key=True)
        country_code = models.ForeignKey(Country)
    
    class Country(models.Model):
        country_code = models.CharField(primary_key=True)
        country = models.CharField()
    

    【讨论】:

    • 为什么要根据 country_code 字段建立关系。我想了解你的逻辑
    • @НаглыйСпамер 因为这是关系数据库的最佳实践。您为表中的每一行分配一个唯一值(主键),并避免重复数据。您不需要在两个表中都存储country,因为这是重复数据。相反,您将其存储在 Country 中,当您想要检索它时,您可以使用 country_code 加入它,这是表中的唯一值。
    • 谢谢你。现在我明白了。也回答我的问题是一对多的关系吗?还是一对一?
    • @НаглыйСпамер 一对多。一对一是一种非常罕见的关系。
    • 我想要一个澄清的问题。我完全不明白为什么我应该使用 country_code 字段建立关系我可以选择 country_code 字段而不是国家字段吗?
    猜你喜欢
    • 2012-05-08
    • 1970-01-01
    • 2017-09-18
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多