3

我正在尝试为一个应用程序设计一个模型,允许 2 人互相下注(我知道,听起来很愚蠢......)。我想知道的是如何将赌注与用户联系起来。结构是这样的

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

所以我们有 2 个人互相下注(都Users来自 django auth 系统),然后,在其中一个获胜后,就有一个赢家。现在所有这 3 个字段都是 type User,但是:

  • 我应该让 BetUser1 和 BetUser2 分开字段,还是在这里设计一些多对二的关系?(多对二是多对多,并且通过某种外部方式确保Users每个赌注不能分配超过 2 个?
  • 获胜者只能是用户 1 或用户 2,当然不能是其他人。我应该如何创建这个字段,另一个ForeignKey(User),或者其他一些?

只是寻找一些新的观点,因为在这种愚蠢的情况下,我似乎被 django 模型系统困住了。

4

2 回答 2

4

我可能会添加第三个模型来代表某人下的特定赌注,因为可以想象有两个以上的人可以下注。它看起来像这样:

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

Django 会自动生成user.wager_setbet.wager_set基于外键。这使您可以轻松地迭代和显示投注的投注,以及每个用户的投注。您还可以在 Wager 表中添加unique_together约束,User以便Bet每个用户只能下一个赌注。

当投注全部完成并选出获胜者后,您只需设置bet.winner.

万一你遇到它,你可能会看到一个关于related_name通过Bet指向WagerWager指向的警告Bet。要修复,只需添加related_name=wagersWager.bet.

于 2008-10-31T12:32:13.810 回答
1

您需要的是具有额外数​​据的多对多关系(例如,投注金额、输入时间……)

在关于编写模型的优秀 Django 文档中有一个章节。

Tyler 已经为此概述了适当的模式。

于 2008-10-31T13:33:54.637 回答