Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在django博彩游戏中计算和存储分数?_Django_Sqlite_Django Models_Triggers - Fatal编程技术网

如何在django博彩游戏中计算和存储分数?

如何在django博彩游戏中计算和存储分数?,django,sqlite,django-models,triggers,Django,Sqlite,Django Models,Triggers,我正在做我的第一个django项目,这是一个体育博彩游戏 我的模型是: class Game(models.Model): home_team = models.CharField(max_length=200) away_team = models.CharField(max_length=200) home_goals = models.IntegerField(default=None) away_goals = models.IntegerField(de

我正在做我的第一个django项目,这是一个体育博彩游戏

我的模型是:

class Game(models.Model):
    home_team = models.CharField(max_length=200)
    away_team = models.CharField(max_length=200)
    home_goals = models.IntegerField(default=None)
    away_goals = models.IntegerField(default=None)


class Bet(models.Model):
    gameid = models.ForeignKey(Game, on_delete=models.CASCADE)
    userid = models.ForeignKey(User, on_delete=models.CASCADE)
    home_goals = models.IntegerField()
    away_goals = models.IntegerField()
    score = models.IntegerField(default=None, null=True)
计算分数的逻辑是:

WHEN polls_bet.home_goals = polls_game.home_goals AND polls_bet.away_goals = polls_game.away_goals THEN 2 
WHEN polls_game.home_goals > polls_game.away_goals AND polls_game.home_goals > polls_game.away_goals THEN 1 
WHEN polls_bet.home_goals < polls_bet.away_goals AND polls_game.home_goals < polls_game.away_goals THEN 1 
ELSE 0
但我也不知道如何计算分数。
请建议如何在不使用sql视图的情况下正确执行此操作。我感谢所有的答案

您可以在下注模型上定义“分数”属性来轻松解决此问题。请参阅文档

您的属性实现类似于:

@property
def score(self):
    if (self.home_goals == self.game__home_goals and
            self.away_goals == self.game__away_goals):
        return 2
    if (self.game__home_goals > self.game__away_goals):
        return 1
    if (self.home_goals < self.away_goals and
            self.game__home_goals < self.home_goals):
        return 1
    return 0
@属性
def分数(自我):
如果(self.home\u goals==self.game\u home\u goals和
self.away\u goals==self.game\u away\u goals):
返回2
如果(self.game\uuu home\u goals>self.game\uuu way\u goals):
返回1
如果(自我主场\目标<自我客场\目标和
self.game\u home\u goals

另一方面,foreignkey关系的正常命名约定是小写的模型名。所以它变成了“游戏”和“用户”,而不是“游戏ID”和“用户ID”。另外,我相信你在第二个条件上有一些拼写错误。

谢谢你,Jose,这听起来真的很棒!不幸的是,当我从我的赌注模型中删除了分数并将其添加为属性(粘贴了您的代码),然后迁移时,我的赌注表中没有显示分数字段。我做错了什么?@Patr01,属性是一个计算值,它没有存储在数据库中。如果你想将它存储在数据库中,你需要手动更新它,但是你可以使用相同的逻辑。我需要存储它,这样我就可以为每个用户求和,对吗?你说我必须手动更新是什么意思?谢谢您的考虑,这是我的第一步:)@Patr01,您需要知道何时更新分数,因为下注时可能不知道结果。可能是游戏模型上的后置保存信号,并在游戏完成时更新下注模型。看见
@property
def score(self):
    if (self.home_goals == self.game__home_goals and
            self.away_goals == self.game__away_goals):
        return 2
    if (self.game__home_goals > self.game__away_goals):
        return 1
    if (self.home_goals < self.away_goals and
            self.game__home_goals < self.home_goals):
        return 1
    return 0