3

私は、2 人が互いに賭けることができるアプリケーションのモデルを設計しようとしています (私は知っています、ばかげているように聞こえます...)。気になるのは、どうやって賭けをユーザーにつなげていくか。構造はこんな感じ

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

それで、お互いに賭けた2人がいて(どちらもUsersdjango認証システムからのものです)、そのうちの1人が勝った後、勝者がいます。現在、これら 3 つのフィールドはすべて typeUserですが、次のようになります。

  • BetUser1 と BetUser2 を別々のフィールドにするか、多対 2 の関係を設計する必要がありますか? (多対2は多対多であり、Users各賭けに2つ以上を割り当てることができないことを保証する外部の方法がありますか?
  • 勝者はユーザー 1 またはユーザー 2 のいずれかのみであり、もちろん他の誰でもありません。このフィールド、さらに別のフィールド、または他のフィールドを作成するにはどうすればよいForeignKey(User)ですか?

このような愚かなケースでは、djangoモデルシステムにこだわっているように見えるので、新鮮な視点を探しています。

4

2 に答える 2

4

3 番目のモデルを追加して、誰かが行った特定の賭けを表すことになるでしょう。2 人以上の人が賭けに参加する可能性があると考えられるからです。次のようになります。

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

Django は自動的に生成user.wager_setbet.wager_set、外部キーに基づいています。これにより、賭けの賭け金と各ユーザーの賭け金を簡単に反復して表示できます。各ユーザーが 1 つの賭けしかできないように、賭けテーブルに制約unique_togetherを追加することもできます。UserBet

賭けがすべて終了し、勝者が選択されたら、 を設定するだけですbet.winner

万一それに遭遇した場合、 point toとpoint toについての警告が表示されることがありrelated_nameます。修正するには、 に追加するだけです。BetWagerWagerBetrelated_name=wagersWager.bet

于 2008-10-31T12:32:13.810 に答える
1

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

これについては、モデルの記述に関する優れた Django ドキュメントに章があります。

Tyler は、このための適切なスキーマを既に概説しています。

于 2008-10-31T13:33:54.637 に答える