Entwerfen Modellstruktur für django
-
05-07-2019 - |
Frage
Ich versuche, eine Anwendung, ein Modell zu entwerfen, so dass zwei Menschen miteinander wetten (ich weiß, das klingt dumm ...). Was ich mich frage, ist, wie die Wette mit den Nutzern zu verbinden. Die Struktur ist wie folgt
|-------------| |----------|
| Bet | | User |
| BetUser1 | |----------|
| BetUser2 |
| Winner |
| ... |
|-------------|
Also haben wir zwei Menschen, die miteinander wetten (beide von django Auth-System Users
werden) und dann, nachdem einer von ihnen gewinnt, gibt es einen Gewinner. Nun sind alle diese drei Felder sind vom Typ User
, aber:
- Sollte ich BetUser1 und BetUser2 separate Felder machen, oder stellen einige von vielen zu zwei Beziehung hier? (Mit many-to-two ist ein many-to-many und mit etwas äußerlich nicht mehr als 2
Users
sicherzustellen, kann jede Wette zugeordnet werden? - Gewinner kann nur entweder Benutzer 1 oder Benutzer 2, niemand sonst natürlich. Wie soll ich dieses Feld erstellen, noch eine weitere
ForeignKey(User)
, oder etwas anderes?
Nur auf der Suche nach frischem Sicht, da es, dass ich bin fest mit dem django Modellsystem in einer solchen dummen Fall zu sein scheint.
Lösung
Ich würde wahrscheinlich ein drittes Modell hinzufügen, eine bestimmte Wette jemand darstellen hat gelegt, da es denkbar ist, dass mehr als zwei Personen in eine Wette geben könnte. Es würde wie folgt aussehen:
USER WAGER BET
User (FK(User)) Description
Bet (FK(Bet)) Winner (FK (Wager), null=True)
Amount
Django automatisch user.wager_set
und bet.wager_set
erzeugen, basierend auf dem Fremdschlüssel. Auf diese Weise können Sie ganz einfach zu durchlaufen und die Wetteinsätze für eine Wette angezeigt werden, sowie die Einsätze von jedem Benutzer. Sie können auch eine unique_together
Einschränkung für User
und Bet
in der Wager Tabelle hinzufügen, so dass jeder Benutzer nur eine Wette machen.
Wenn die Wetten wird alles getan, und ein Gewinner ausgewählt wurde, die Sie gerade eingestellt bet.winner
.
Falls Sie hinein laufen, könnten Sie eine Warnung über related_name
sehen von Bet
Punkt Wager
und Wager
Punkt Bet
. Um dies zu beheben, fügen Sie einfach related_name=wagers
zu Wager.bet
.
Andere Tipps
Was Sie brauchen, ist eine Many-to-Many Beziehung mit zusätzlichen Daten (zum Beispiel der Menge auf der Wette, die Zeit eingegeben, ...)
Es gibt ein chaper auf dieses in den ausgezeichneten Django docs auf das Schreiben Modellen.
Tyler hat skizzierte bereits das richtige Schema für diese.