2014-10-28 52 views
0

如果我有以下型号:做一个模型的所有对象提供给另一个模型

class Player(models.Model): 
    game = models.ForeignKey('Game', null=True, blank=True) 

class Game(models.Model): 
    score = models.IntegerField(default=0) 

这样,如果我有一个类型的游戏的多个对象,p.game(其中p为类型的对象玩家)将永远是无。如果我添加n个Game类型的对象,我希望它们对所有玩家都可用,但每个玩家都应该有他自己的分数。我怎样才能做到这一点? Django 1.4.2如果很重要。

回答

1
+0

我还是要每场比赛手动添加到每个球员。这不是我所需要的 – 2014-10-28 13:49:36

+0

如果我们避免查看可视化,并且有许多对你有 游戏 - 对所有玩家可见的游戏列表, Players.game - 为每个玩家选择的所有游戏的一部分(可以是唯一的) 所以问题是用户界面? – 2014-10-28 13:56:19

+0

不好意思啊,去看看那些得分 – 2014-10-28 13:57:15

0

您可以创建第三个模型,并保持它的简单。

class Player(models.Model): 
    name = models.CharField(default="John Rambo", max_length=256) 

class Game(models.Model): 
    name = models.CharField(default="Pack-man", max_length=256) 

class Instance(models.Model): 
    player = models.ForeignKey(Player) 
    game = models.ForeignKey(Game) 
    score = models.IntegerField(default=0) 

我明白你非常初学者所以加入一个例子:

In [1]: from xyz.models import * 

In [2]: player = Player() 
In [3]: player.save() 

In [4]: game = Game() 
In [5]: game.save() 

In [6]: instance1 = Instance.objects.create(player=player, game=game, score=0) 

In [7]: player.instance_set.all() 
Out[7]: [<Instance: Instance object>] 

In [8]: game.instance_set.all() 
Out[8]: [<Instance: Instance object>] 

In [9]: all_scores_for_john_rambo = [i.score for i in player.instance_set.filter(player__name="John Rambo")] 
Out[9]: [0] 
+1

我想在Django M2M领域已经有Extra字段了 https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships It在新模型中使用额外的逻辑做同样的事 – 2014-10-28 14:03:23

+0

同样的问题如下。 – 2014-10-28 14:07:03

相关问题