2011-01-02 22 views
1

私はジャンゴとOOでは比較的新しいので、私は何かを明らかに不足していることかもしれないが、私は次のようにモデル化する方法のまわりで私の頭をラップすることはできません。Djangoの多対多の関係との関係?

  • 私は場所を持っています。

  • 私はゲームを持っています。

(これらは「独占」、ゲームタイトルではなく、特定のインスタンスのようなゲームです)、それが必要として、各場所にはできるだけ多くのゲームを持つことができ、そしてゲームは複数の場所にすることができます。

これは、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関係や中間モデルで余分なフィールドを調べましたが、これを適切に行う方法を見つけることはできません。

いずれのポインタも喜んで感謝します。

ありがとうございます!

答えて

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) 

です。私はあなたのGameGameTypeに改名し、GameLocationGameと呼んでいます。

+0

ありがとう、それは私が必要としたものです。私は右のエリアを回っていた、あなたはそれをきれいにしました。完璧。 – Zoom