我对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关系和中间模型的额外字段,但我无法找到正确的方法。
任何指示都很高兴。
谢谢!
答案 0 :(得分:1)
如果你想链接到Game& amp;您需要创建中介模型的位置。 这是一个示例代码
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
。