質問

私は、2人が互いに賭けることを許可するアプリケーションのモデルを設計しようとしています(ばかげているように聞こえますが...)。私が疑問に思っているのは、ベットをユーザーと結び付ける方法です。構造は次のとおりです

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

だからお互いに賭けた2人(両方ともdjango認証システムの Users )がいて、そのうちの1人が勝った後、勝者がいます。これら3つのフィールドはすべて User タイプですが、次のとおりです。

  • BetUser1とBetUser2を別々のフィールドにするか、ここで多対2の関係を設計する必要がありますか? (多対2が多対多で、各ベットに割り当てられる Users が2人を超えないようにする外部的な方法がある場合
  • 勝者は、ユーザー1またはユーザー2のいずれかのみです。このフィールド、さらに別の ForeignKey(User)、またはその他のフィールドを作成するにはどうすればよいですか?

このような愚かなケースではdjangoモデルシステムに固執しているように見えるため、新しい観点を探しているだけです。

役に立ちましたか?

解決

おそらく、3人目のモデルを追加して、誰かが賭けた特定の賭け金を表すでしょう。2人以上が賭けに参加する可能性があるためです。次のようになります:

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

Djangoは、外部キーに基づいて user.wager_set および bet.wager_set を自動的に生成します。これにより、賭けの賭け金と各ユーザーの賭け金を簡単に繰り返し表示することができます。また、Wagerテーブルの User および Bet unique_together 制約を追加して、各ユーザーが1回だけ賭けることができるようにします。

賭けがすべて完了し、勝者が選択されたら、単に bet.winner を設定します。

これに遭遇した場合、 Bet Wager および Wager <を指すようにすることで、 related_name に関する警告が表示される場合があります。 / code>は Bet を指します。修正するには、 related_name = wagers Wager.bet に追加するだけです。

他のヒント

必要なのは、追加データ(賭け金の金額、入力された時間など)を持つ多対多の関係です

モデルの記述に関する優れたDjangoドキュメントのこれについてのシャパー

タイラーはすでにこのための適切なスキーマを概説しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top