Question

Je suis relativement nouveau à Django et OO, donc je manquer quelque chose évidente, mais je ne peux pas envelopper la tête autour de la façon de modéliser les éléments suivants:

  • J'ai emplacements.

  • J'ai des jeux.

Chaque emplacement peut avoir autant de jeux dont il a besoin, et des jeux peut être à plusieurs endroits (ce sont des jeux comme dans « monopole », le titre du jeu, pas une instance spécifique).

Ceci est assez simple modèle avec une relation 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 ]

J'ai aussi le modèle habituel de l'utilisateur Django.

Maintenant, ce que je suis en train d'ajouter à cette relation est le concept de scores.

Les utilisateurs doivent être en mesure d'entrer leurs scores pour un jeu situé dans un endroit particulier. Je puis être en mesure de montrer, par exemple, les 10 meilleurs scores pour chaque jeu dans un endroit, mais aussi les 10 meilleurs scores au niveau mondial pour un jeu sur tous les sites.

Donc, il devrait essentiellement être un score lié à un utilisateur, un jeu et un emplacement.

Il me semble que ce devrait être un certain type de relation à la relation elle-même. Je regardais les champs supplémentaires sur les relations m2m et à des modèles intermédiaires, mais je ne peux pas trouver un moyen de le faire correctement.

Les pointeurs volontiers apprécié.

Merci!

Était-ce utile?

La solution

Si vous souhaitez créer un lien vers le releationship entre le jeu et emplacement vous devez créer le modèle intermédiaire. Voici un exemple de code

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. Je renommer votre Game à GameType puis appeler GameLocation simple, un Game.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top