【问题标题】:relationship to a Django many to many relationship?与 Django 多对多关系的关系?
【发布时间】:2011-06-02 13:52:55
【问题描述】:

我对 Django 和 OO 比较陌生,所以我可能遗漏了一些明显的东西,但我无法理解如何对以下内容进行建模:

  • 我有位置。

  • 我有游戏。

每个位置都可以拥有所需数量的游戏,并且游戏可以位于多个位置(这些是“大富翁”中的游戏,即游戏名称,而不是特定实例)。

这很简单,可以用 m2m 关系建模:

class Location(models.Model):
    name = models.CharField(max_length=300)
    city = models.CharField(max_length=300)
    [ etc etc ]
    games = models.ManyToManyField('Game', related_name='locations', blank=True)


class Game(models.Model):
    name = models.CharField(max_length=300)
    manufacturers = models.ForeignKey('Manufacturer')
    [ etc etc ]

我也有通常的 Django 用户模型。

现在,我要添加到这种关系中的是分数的概念。

用户应该能够为位于特定位置的游戏输入他们的分数。然后,我应该能够显示某个位置的每场比赛的前 10 名得分,以及所有位置的一场比赛的全球前 10 名得分。

所以,基本上应该有一个与用户、游戏和位置相关联的分数。

在我看来,这应该是与关系本身的某种关系。我查看了有关 m2m 关系和中间模型的额外字段,但我无法找到正确执行此操作的方法。

任何指针都很高兴。

谢谢!

【问题讨论】:

    标签: django relationships m2m


    【解决方案1】:

    如果您想链接到游戏和位置之间的关系,您需要创建中间模型。 这是一个示例代码

    class Location(models.Model):
        name = models.CharField(max_length=300)
        city = models.CharField(max_length=300)
        [ etc etc ]
        games = models.ManyToManyField('Game', related_name='locations', blank=True, through='GameLocation')
    
    
    class Game(models.Model):
        name = models.CharField(max_length=300)
        manufacturers = models.ForeignKey('Manufacturer')
        [ etc etc ]
    
    class GameLocation(models.Model):
        game = models.ForeignKey(Game)
        location = models.ForeignKey(Location)
        # some other filed like for example date
    
    class Score(models.Model):
        user = models.ForeginKey('user')
        gamelocation = models.ForeginKey('GameLocation')
        score = models.DecimalField(max_digits=5, decimal_places=2)
    

    顺便说一句。我会将您的 Game 重命名为 GameType,然后调用 GameLocation 简单的 Game。

    【讨论】:

    • 谢谢,这正是我所需要的。我在正确的区域盘旋,你说得很好,很清楚。完美。
    猜你喜欢
    • 1970-01-01
    • 2011-06-22
    • 2012-02-26
    • 1970-01-01
    • 2018-03-16
    • 2014-05-16
    相关资源
    最近更新 更多