我正在开发我的第一个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)
或者也许我应该重建我的数据库?我很感谢所有答案
您可以在查询集上使用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)