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.

War es hilfreich?

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.

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