En realidad no golpeas el db hasta que evalúes el qs, las consultas son lazy
.
Más información here
.
edición:
Después de volver a leer su pregunta se hace evidente que estabas preguntando cómo evitar golpes db cuando se filtra para diferentes condiciones.
qs = SomeModel.objects.all()
qs1 = qs.filter(some_field='some_value')
qs2 = qs.filter(some_field='some_other_value')
Normalmente querrías que la base de datos hiciera el filtrado por ti.
Puede forzar una evaluación de los qs convirtiéndolo en una lista. Esto evitaría más éxitos de DB, sin embargo, sería peor que tener su DB devolver resultados.
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']
Gracias una pregunta más. ¿Puedo presionar db sin convertir QuerySet a una lista? O tal vez puedo convertir la lista a un QuerySet? – alexvassel
No puede convertir la lista al conjunto de preguntas. Puede pulsar db de varias maneras, se enumeran en el segundo enlace de la respuesta de DTing. – DrTyrsa
Puede acceder a la base de datos con los métodos mencionados en el enlace "Leer más aquí", p. iterando, cortando con particiones, etc. Esta respuesta http://stackoverflow.com/questions/1058135/django-convert-a-list-back-to-a-queryset/1058152#1058152 y la pregunta relacionada pueden ser de interés para tú. – DTing