我想设计一个模型应用程序,允许2人赌彼(我知道听起来很愚蠢...).我想知道是怎么连接的赌注,与用户。该结构是这样的

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

所以我们得到了2人,打赌与每一个其他的(都是 Users 从django认证系统)和然后,他们中的一个胜利,是一个赢家。现在所有这3个领域的类型 User, ,但是:

  • 我应该让BetUser1和BetUser2单独领域,或设计一些多对两个的关系在这里?(与许多向两个正在许多对多,并与一些外部方法,确保不超过2 Users 可以分配给每个赌注吗?
  • 赢家只能是用户1或2的用户,没有人别的课程。我应该如何创建这一领域,而另一个 ForeignKey(User), 或一些其他的吗?

只是在寻找一些新鲜的观点,因为它似乎在这种愚蠢的种情况下,我坚持django模型系统。

有帮助吗?

解决方案

我可能会添加一个第三种模式来表示某一特定打赌有人放,因为它可以想象的是,多于两个人可以输入进一个赌。它看起来像这样的东西:

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

Django会自动生成 user.wager_setbet.wager_set 基于外键。这可以让你轻松迭代和显示赌一赌注,以及作为赌注,从每个用户。你还可以添加一个 unique_together 制约因素 UserBet 在赌桌,以便每个用户都可以仅仅让一个赌注。

当赌注是所有做,以及一个胜利者已经选择,你只需要设置 bet.winner.

在情况下你碰它,你可能会看到一个警告 related_name 通过具有 Bet 点到 WagerWager 点到 Bet.修复,只是添加 related_name=wagersWager.bet.

其他提示

什么你需要的是一个多对多关系,与额外的数据(例如数量上的赌注,输入的时间,...)

还有一个 chaper 在这个优秀的Django文档于编写模型。

泰勒已经概述的适当架构,这一点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top