如何根据3个表找到需要操作的ID?

问题描述 投票:2回答:1

我正在开发我的第一个django项目,这是一个体育博彩应用程序。我的模特是:

class Game(models.Model):
    home_team = models.CharField(max_length=100)
    away_team = models.CharField(max_length=100)

class GameResult(models.Model):
    gameid = models.ForeignKey(Game)
    result = models.IntegerField(default=None)

class GameBet(models.Model):
    gameid = models.ForeignKey(Game)
    bet = models.IntegerField(default=None)
    userid = models.ForeignKey(User)

我正在尝试创建一个只显示待处理游戏的视图,这意味着它们没有结果(简单部分)并且还没有下注。

这里的问题是 - 在我的数据库中我只有下注,如:

gameid| userid | userbet
23    | 10     | 2
23    | 11     | 1
23    | 12     | 0

我正在寻找这样的东西:

gameid| userid | userbet
24    | 10     | 1
24    | 11     | 0

当用户ID#12尚未下注时 - 数据库中缺少它,游戏应该在他的待定游戏列表中。

我目前的逻辑是,我知道所有游戏的ID,我知道游戏的结果,我知道我投注的游戏ID。

如何连接这些点并找出我仍然需要下注的游戏?

all_games               = Game.objects.get()
games_with_result       = GameResult.objects.filter(result__isnull=False)
games_with_players_bet  = GameBet.objects.filter(userid_id=selected_player)

或者也许我应该重建我的数据库?我很感谢所有答案

django postgresql django-views
1个回答
2
投票

您可以在查询集上使用exclude

all_games = Game.objects.all()
results = GameResult.objects.filter(result__isnull=False)
games_without_result = all_games.exclude(pk__in=[r.gameid.pk for r in results])
bets_from_player = GameBet.objects.filter(userid_id=selected_player)
owing_games = games_without_result.exclude(pk__in=[bet.gameid.pk for bet in bets_from_player])

GameResult模型可能作为一个场(result = models.IntegerField(default=None))移动到Game。只要你只期望每场比赛一个结果,这应该有用。作为一项优势,您可以轻松查询没有结果的游戏。

games_without_result = Game.objects.filter(result__isnull=True)
© www.soinside.com 2019 - 2024. All rights reserved.