2014-10-28 124 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

相關問題