通过Django中的模型查询进行重新过滤

时间:2018-07-05 12:45:59

标签: python django django-models django-views

我想知道您是否可以将查询的输出保存在views.py文件中,然后在以后进一步查询保存的输出。我需要使用all_games中的所有信息,然后需要all_games的子集。重新查询数据库似乎很愚蠢,因为已经获取了数据。下面的代码是我一直在玩的想法:

all_games = Game.objects.filter(league=passed_dict['league'], season=passed_dict['current_season'], home_team=passed_dict['divisions'][i].teams[j])

# [Random Code]

passed_dict['value'] = all_games.filter(is_played=True)

2 个答案:

答案 0 :(得分:0)

您可以使用列表理解功能在Python中过滤查询集

passed_dict['value'] = [game for game in all_games if game.is_played]

但是,实际上,如果您使用ORM并执行另一个查询,您可能不会注意到性能上的任何差异。

passed_dict['value'] = all_games.filter(is_played=True)

答案 1 :(得分:0)

查询集是惰性的,因此除非您对[随机代码]中的all_games进行某些操作,然后仅过滤all_games-您只是在链接过滤器,并且这里还没有数据库活动。

仅当您在其他地方访问passed_dict ['value']时。您的查询集将得到评估。

如果您在[随机代码]中评估了QS并且使用了这些项,并且确定您不希望数据库中还有其他项尚未在您评估的QS中,请使用循环对其进行过滤/ list理解。