Domanda

Sono relativamente nuovo a Django e OO, così che io possa mancare qualcosa di ovvio, ma non posso avvolgere la mia testa intorno come modellare il seguente:

  • Ho posizioni.

  • Ho giochi.

Ogni posizione può avere come molti giochi come ha bisogno, e giochi possono essere in più sedi (questi sono giochi come in "monopolio", il titolo del gioco, non è un caso specifico).

Questo è abbastanza semplice per modello con un rapporto 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 ]

Ho anche il consueto modello utente Django.

Ora, quello che sto cercando di aggiungere a questo rapporto è il concetto di punteggi.

Gli utenti dovrebbero essere in grado di inserire i loro punteggi per un gioco situato in una posizione particolare. Dovrei quindi in grado di mostrare, ad esempio, i punteggi migliori 10 per ogni gioco in una posizione, ma anche i primi 10 punteggi a livello globale per un gioco in tutte le sedi.

Quindi, in sostanza ci dovrebbe essere un punteggio legato a un utente, un gioco e una posizione.

Sembra a me come dovrebbe essere un qualche tipo di relazione con la relazione stessa. Ho guardato i campi extra sui rapporti m2m ea modelli intermedi, ma non riesco a trovare un modo per farlo correttamente.

Tutti gli indicatori apprezzato volentieri.

Grazie!

È stato utile?

Soluzione

Se si desidera collegare al releationship tra Game & Location è necessario creare modello di intermediario. Ecco un esempio di codice

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. Vorrei rinominare la Game per GameType e quindi chiamare GameLocation semplice un Game.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top