Это из документации django по методу queryset iterator()
:
QuerySet обычно кэширует свои результаты внутри, чтобы повторные оценки не приводили к дополнительным запросам. Напротив, iterator() будет читать результаты напрямую, без какого-либо кэширования на уровне QuerySet (внутренне, итератор по умолчанию вызывает iterator() и кэширует возвращаемое значение). Для QuerySet, который возвращает большое количество объектов, к которым вам нужно получить доступ только один раз, это может привести к повышению производительности и значительному сокращению памяти.
После прочтения я все еще в замешательстве: строка об увеличении производительности и сокращении памяти говорит о том, что нам следует просто использовать метод iterator()
. Может кто-нибудь привести примеры хороших и плохих случаев использования iterator()
?
Даже если результаты запроса не кэшируются, если они действительно хотели получить доступ к моделям более одного раза, не может ли кто-то просто сделать следующее?
saved_queries = list(Model.objects.all().iterator())