Вы на самом деле не попадаете в db, пока не оцените qs, запросы lazy
.
Подробнее here
.
редактировать:
После перечитывания вашего вопроса становится очевидным, вы спрашивали, как предотвратить хиты дБ при фильтрации для различных условий.
qs = SomeModel.objects.all()
qs1 = qs.filter(some_field='some_value')
qs2 = qs.filter(some_field='some_other_value')
Обычно вы хотите, чтобы база данных выполняла фильтрацию для вас.
Вы можете заставить оценку qs преобразовать ее в список. Это предотвратило бы дальнейшие удары db, однако, вероятно, это будет хуже, чем возврат ваших результатов в db.
qs_l = list(qs)
qs1_l = [element for element in qs_l if element.some_field='some_value']
qs2_l = [element for element in qs_l if element.some_field='some_other_value']
Спасибо, еще один вопрос. Могу ли я ударить db без преобразования QuerySet в список? Или, может быть, я могу преобразовать список обратно в QuerySet? – alexvassel
Вы не можете преобразовать список в запрос. Вы можете ударить db несколькими способами, они перечислены во второй ссылке ответа DTing. – DrTyrsa
Вы можете ударить по db способами, указанными в ссылке «Подробнее здесь», например. итерации, нарезки с разделами и т. д. Этот ответ http://stackoverflow.com/questions/1058135/django-convert-a-list-back-to-a-queryset/1058152#1058152 и связанный с ним вопрос могут представлять интерес для вы. – DTing