Frage

Ich bin relativ neu in Django und OO, deshalb fehlt mir vielleicht etwas Offensichtliches, aber ich kann meinen Kopf nicht darum wickeln, wie man Folgendes modelliert:

  • Ich habe Standorte.

  • Ich habe Spiele.

Jeder Standort kann so viele Spiele haben, wie er benötigt, und Spiele können an mehreren Orten stattfinden (diese sind Spiele wie in "Monopoly", der Spieltitel, nicht eine bestimmte Instanz).

Dies ist einfach genug, um mit einer 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 das übliche Django -Benutzermodell.

Was ich jetzt zu dieser Beziehung versuche, ist das Konzept der Punktzahlen.

Benutzer sollten in der Lage sein, ihre Ergebnisse für ein Spiel an einem bestimmten Ort einzugeben. Ich sollte dann in der Lage sein, beispielsweise die Top 10 Punkte für jedes Spiel an einem Ort zu zeigen, aber auch die zehn Top -10 -Ergebnisse weltweit für ein Spiel an allen Standorten.

Grundsätzlich sollte es eine Punktzahl geben, die mit einem Benutzer, einem Spiel und einem Ort verknüpft ist.

Es sieht für mich so aus, als ob es eine Art Beziehung zur Beziehung selbst sein sollte. Ich habe mir zusätzliche Felder auf M2M -Beziehungen und Vermittlungsmodellen angesehen, aber ich kann keinen Weg finden, dies richtig zu tun.

Alle Zeiger schätzten gerne.

Vielen Dank!

War es hilfreich?

Lösung

Wenn Sie mit dem Relationship zwischen Spiel und Standort verlinken möchten, müssen Sie ein Intermediary -Modell 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)

Übrigens. Ich würde deine umbenennen Game zu GameType und dann anrufen GameLocation Einfach a Game.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top