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

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

因此,我们有2个人互相下注(都是django auth系统的Users),然后,在其中一位赢得比赛之后,就有了赢家。现在,所有这三个字段的类型均为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。这使您可以轻松地迭代和显示下注的赌注,以及每个用户的赌注。您还可以在Wager表中的unique_togetherUser上添加Bet约束,以便每个用户只能下一个赌注。

    当下注全部完成并且选择了赢家后,您只需设置bet.winner即可。

    万一遇到它,您可能会看到有关related_name的警告,方法是让Bet指向Wager,而Wager指向Bet。要解决此问题,只需将related_name=wagers添加到Wager.bet即可。

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

    10-10 06:04