2011-01-02 17 views
1

Ich bin relativ neu in Django und OO, so ich mag offensichtlich etwas fehlt, aber ich kann meinen Kopf um nicht umgebrochen, wie folgendes Modell:Beziehung zu einem Django viele zu viele Beziehung?

  • I Standorte haben.

  • Ich habe Spiele.

Jeder Ort so viele Spiele haben kann, wie es braucht, und Spiele können an mehreren Orten sein (das sind Spiele wie in „Monopol“, der Titel des Spiels, nicht eine bestimmte Instanz).

Das ist einfach genug mit einem m2m Beziehung zu modellieren:

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 ] 

Ich habe auch die üblichen Django Benutzermodell.

Nun, was ich versuche, diese Beziehung hinzuzufügen, ist das Konzept der Punkte.

Benutzer sollten ihre Punktzahlen für ein Spiel an einem bestimmten Ort eingeben können. Ich sollte dann in der Lage sein, die Top 10 Punkte für jedes Spiel an einem Ort zu zeigen, aber auch die Top 10 Punkte für ein Spiel an allen Orten.

Also sollte im Grunde eine Punktzahl mit einem Benutzer, einem Spiel und einem Standort verknüpft sein.

Es sieht für mich so aus, als sollte es eine Art von Beziehung zu der Beziehung selbst sein. Ich habe mir zusätzliche Felder zu m2m-Beziehungen und zu Zwischenmodellen angeschaut, aber ich finde keinen Weg, dies richtig zu machen.

Alle Zeiger gerne geschätzt.

Danke!

Antwort

1

Wenn Sie mit der Relation zwischen Spiel & Ort verknüpfen möchten, müssen Sie Zwischenmodell erstellen. Hier ist ein Beispielcode

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) 

Btw. Ich würde Ihre Game zu GameType umbenennen und dann GameLocation einfach eine Game anrufen.

+0

Danke, das ist genau das, was ich brauchte. Ich habe die richtige Gegend umkreist, du hast es schön und klar gemacht. Perfekt. – Zoom

Verwandte Themen