如何修复Django查询仅返回teamsquery首个结果对应赛事的问题?
解决Django中筛选用户所有球队赛事的问题
嘿,我来帮你搞定这个小问题!你当前的代码只返回了用户所属第一支球队的赛事,原因很简单:当你直接把teamsquery这个QuerySet传给hometeamID和awayteamID时,Django会默认匹配QuerySet里的第一个对象,而不是遍历所有球队。
要获取用户所有球队的赛事,只需要把过滤条件里的=改成__in就可以了——__in是Django ORM里用来匹配“属于某个集合”的查询操作符,它会遍历teamsquery里的所有球队,把对应的主队或客队赛事都捞出来。
修改后的代码如下:
teamsquery = Team.objects.filter(userteams__userID=request.user) fixturesquery = Fixtures.objects.filter(Q(hometeamID__in=teamsquery) | Q(awayteamID__in=teamsquery))
如果想进一步优化性能,还可以先提取所有球队的ID列表,再用这个列表做筛选,这样数据库只需要处理ID值,会更高效:
# 先获取用户所有球队的ID列表 team_ids = Team.objects.filter(userteams__userID=request.user).values_list('id', flat=True) # 用ID列表筛选对应赛事 fixturesquery = Fixtures.objects.filter(Q(hometeamID__in=team_ids) | Q(awayteamID__in=team_ids))
这样修改后,fixturesquery就会包含用户所有所属球队参与的所有赛事啦~
内容的提问来源于stack exchange,提问作者kate
相关产品推荐
相关产品推荐

