Question

J'essaie de concevoir un modèle pour une application permettant à deux personnes de parier entre elles (je sais, ça semble stupide ...). Ce que je me demande, c'est comment connecter le pari avec les utilisateurs. La structure est comme ça

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

Nous avons donc 2 personnes qui ont misé l'une avec l'autre (les deux sont des utilisateurs du système django auth), puis, lorsque l'un d'eux gagne, il y a un gagnant. Maintenant, tous ces 3 champs sont de type Utilisateur , mais:

  • Dois-je créer des champs distincts pour BetUser1 et BetUser2 ou définir une relation plusieurs à deux ici? (avec plusieurs-à-deux étant plusieurs-à-plusieurs et avec un moyen externe de s'assurer qu'il ne reste plus que 2 Utilisateurs pouvant être affectés à chaque pari?
  • gagnant ne peut être que l'utilisateur 1 ou l'utilisateur 2, personne d'autre bien sûr. Comment dois-je créer ce champ, encore un autre ForeignKey (Utilisateur) , ou un autre?

Je cherche juste un nouveau point de vue, car il semble que dans un cas aussi stupide, je suis coincé dans le système de modèles django.

Était-ce utile?

La solution

J'ajouterais probablement un troisième modèle pour représenter un pari spécifique qu'une personne a placé, car il est concevable que plus de deux personnes puissent entrer dans un pari. Cela ressemblerait à quelque chose comme ça:

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

Django générera automatiquement user.wager_set et bet.wager_set en fonction des clés étrangères. Cela vous permet de facilement parcourir et afficher les paris d'un pari, ainsi que les paris de chaque utilisateur. Vous pouvez également ajouter une contrainte unique_together sur Utilisateur et Parier dans la table Wager afin que chaque utilisateur ne puisse faire qu'un seul pari.

Lorsque le pari est terminé et qu'un gagnant est sélectionné, il vous suffit de définir bet.winner .

Au cas où vous l'auriez rencontré, vous pourriez recevoir un avertissement sur nom_relié en faisant en sorte que Pari pointe sur Wager et Wager <. / code> pointez sur Parier . Pour résoudre ce problème, ajoutez simplement related_name = wagers à Wager.bet .

Autres conseils

Ce dont vous avez besoin, c’est d’une relation plusieurs à plusieurs avec des données supplémentaires (par exemple, le montant du pari, le temps saisi, ...)

Il y a un chaper dans les excellents documents Django sur l’écriture de modèles.

Tyler a déjà défini le schéma approprié pour cela.

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