我正在尝试为允许 2 个人互相打赌的应用程序设计一个模型(我知道,听起来很愚蠢......)。我想知道的是如何将赌注与用户联系起来。结构是这样的
|-------------| |----------|
| Bet | | User |
| BetUser1 | |----------|
| BetUser2 |
| Winner |
| ... |
|-------------|
所以我们有 2 个人互相打赌(都是来自 django 身份验证系统的用户
),然后,在其中一人获胜之后,就有了赢家。现在所有这 3 个字段都是 User
类型,但是:
- 我应该让 BetUser1 和 BetUser2 分开字段,还是在这里设计一些多对二的关系? (多对二是多对多,并且有一些外部方式确保不超过 2 个
用户
可以分配给每个赌注? - 获胜者只能是用户 1 或用户 2,当然不能是其他人。我应该如何创建此字段、另一个
ForeignKey(User)
或其他字段?
只是在寻找一些新的观点,因为在这种愚蠢的情况下,我似乎坚持使用 django 模型系统。
最佳答案
我可能会添加第三个模型来表示某人下的特定赌注,因为可以想象不止两个人可以下注。它看起来像这样:
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
约束,这样每个用户只能下注一次。
当投注全部完成并选出赢家后,您只需设置 bet.winner
。
如果您遇到它,您可能会看到关于 related_name
的警告,方法是让 Bet
指向 Wager
和 Wager
指向 Bet
。要修复,只需将 related_name=wagers
添加到 Wager.bet
。
关于django - 为django设计模型结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/253286/