【问题标题】:Django Model: What is a efficient way to list Foreign Key?Django 模型:列出外键的有效方法是什么?
【发布时间】:2016-04-06 12:53:39
【问题描述】:

我有以下三个模型。我省略了一些不相关的字段。

class Team(models.Model):
    name = models.CharField(max_length=100)

class Player(models.Model):
    name = models.CharField(max_length=100)

class Match(models.Model):
    home = models.ForeignKey(Team)
    away = models.ForeignKey(Team)
    home_players = models.CharField(max_length=100, null=True)
    away_players = models.CharField(max_length=100, null=True)

home_playersaway_players 具有玩家id列表的类型,例如[1,2,3,...,15]。

我想知道更好的方法,比如使用外键列表。 因为,我在 Django 管理页面 手动插入玩家 ID 时遇到了一些麻烦。在Player() 中查找玩家姓名并匹配玩家 ID 需要花费很多时间。如果我可以在Player()Team() 之间分配某种关系,我想任务会更容易。

【问题讨论】:

  • 您已经指定了球队和球员之间的关系,但您的模型并不能代表这一点,所以是的,您应该在球员身上有一个球队的 fk

标签: mysql django database django-models


【解决方案1】:

那将是many-to-many 关系。

https://docs.djangoproject.com/en/1.9/topics/db/examples/many_to_many/

class Match(models.Model):
    home = models.ForeignKey(Team)
    away = models.ForeignKey(Team)
    home_players = models.ManyToManyField(Player)
    away_players = models.ManyToManyField(Player)

【讨论】:

  • 谢谢你,C14L。您的代码工作正常。再添加一个问题......是否有一个约束选项让Player() 的实例属于一个Team()
  • 这可能是您的 Player 模型上的 ForeignKey:team = models.ForeignKey(Team, related_name='players')。然后in Match.clean() check 每个玩家都在自己的球队比赛。
  • 非常感谢!!这很有帮助。 @C14L
猜你喜欢
  • 2010-11-09
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
  • 2019-02-10
  • 2015-05-10
  • 2011-10-08
相关资源
最近更新 更多