django - 为django设计模型结构

标签 django database-design django-models

我正在尝试为允许 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_setbet.wager_set。这使您可以轻松地迭代和显示投注的赌注,以及每个用户的赌注。您还可以在 Wager 表中对 UserBet 添加 unique_together 约束,这样每个用户只能下注一次。

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

如果您遇到它,您可能会看到关于 related_name 的警告,方法是让 Bet 指向 WagerWager 指向 Bet。要修复,只需将 related_name=wagers 添加到 Wager.bet

关于django - 为django设计模型结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/253286/

相关文章:

python - Django 将所有内容重定向到主页

python - 将模型范围的帮助文本添加到 django 模型的管理表单

python - 从字符串中获取后如何在paramiko中包含私钥?

php - MySQL如何防止主键重复

django - 多个 Django 应用程序应如何相互通信?

python - Django:第二次 Selenium 测试因 500 服务器错误而失败

mysql - 数据归一化无法达到3nf

sql - 电子商务的产品属性数据库结构

django - Django 中的唯一模型字段和区分大小写 (postgres)

django - 整个模型为只读