Повторная фильтрация по модельным запросам в Джанго - PullRequest
0 голосов
/ 05 июля 2018

Мне было интересно, можете ли вы сохранить выходные данные запроса в файле 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 голосов
/ 05 июля 2018

Querysets ленивы, так что если вы не делаете что-то с all_games в [Случайный код], а затем просто фильтруете all_games - вы просто просто объединяете фильтры в цепочку и не выполняете никаких действий с базой данных здесь.

Только когда вы обращаетесь к pass_dict ['value'] где-то еще. Ваш набор запросов оценивается.

Если вы оцениваете QS в [случайном коде] и работаете с элементами, и вы уверены, что вам не нужны никакие другие элементы из базы данных, которых еще нет в вашей оцененной QS, просто отфильтруйте их с помощью цикла / список понимания.

0 голосов
/ 05 июля 2018

Вы можете отфильтровать набор запросов в Python, используя понимание списка

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

Однако на практике вы, вероятно, не заметите никакой разницы в производительности, если используете ORM и выполняете другой запрос.

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