Domanda

Sto cercando di progettare un modello per un'applicazione che consenta a 2 persone di scommettere tra loro (lo so, sembra stupido ...). Quello che mi chiedo è come collegare la scommessa con gli utenti. La struttura è così

|-------------|       |----------|
|    Bet      |       | User     |
| BetUser1    |       |----------|
| BetUser2    |
| Winner      |
| ...         |
|-------------|

Quindi abbiamo 2 persone che scommettono l'una con l'altra (entrambe sono Utenti del sistema django auth) e poi, dopo che una di esse vince, c'è un vincitore. Ora tutti questi 3 campi sono di tipo User , ma:

  • Devo creare campi separati BetUser1 e BetUser2 o progettare qui una relazione molti-a-due? (con molti-a-due che sono molti-a-molti e con un modo esterno di garantire non più di 2 Utenti possono essere assegnati a ciascuna scommessa?
  • il vincitore può essere solo l'utente 1 o l'utente 2, nessun altro ovviamente. Come devo creare questo campo, ancora un altro ForeignKey (utente) o qualcun altro?

Sto solo cercando un nuovo punto di vista, in quanto sembra che in un caso così stupido sono bloccato con il sistema modello django.

È stato utile?

Soluzione

Probabilmente aggiungerei un terzo modello per rappresentare una scommessa specifica che qualcuno ha piazzato, poiché è concepibile che più di due persone possano entrare in una scommessa. Sarebbe simile a questo:

USER        WAGER              BET
             User (FK(User))    Description
             Bet  (FK(Bet))     Winner (FK (Wager), null=True)
             Amount

Django genererà automaticamente user.wager_set e bet.wager_set in base alle chiavi esterne. Ciò ti consente di iterare e visualizzare facilmente le scommesse per una scommessa, nonché le scommesse di ciascun utente. Puoi anche aggiungere un vincolo unique_together su User e Bet nella tabella delle scommesse in modo che ogni utente possa effettuare una sola scommessa.

Al termine delle scommesse ed è stato selezionato un vincitore, è sufficiente impostare bet.winner .

Nel caso in cui ti imbatti, potresti visualizzare un avviso su related_name facendo Scommetti puntare su Scommessa e Scommessa punta a Scommetti . Per risolvere, aggiungi related_name = wagers a Wager.bet .

Altri suggerimenti

Ciò di cui hai bisogno è una relazione Molti-a-molti con dati extra (ad es. l'importo sulla scommessa, il tempo inserito, ...)

Esiste un chaper su questo negli eccellenti documenti di Django sulla scrittura di modelli.

Tyler ha già delineato lo schema corretto per questo.

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