def queryset_iterator(queryset: models.QuerySet, chunk_size: int): """ QuerySet.iterate with prefetch_related QuerySet.iterate silently ignores prefetch_related modified from this PR: https://github.com/django/django/pull/10707/files """ iterable = queryset._iterable_class(queryset, chunked_fetch=True, chunk_size=chunk_size) if not queryset._prefetch_related_lookups: yield from iterable return iterator = iter(iterable) while True: results = list(itertools.islice(iterator, chunk_size)) if not results: break prefetch_related_objects(results, *queryset._prefetch_related_lookups) yield from iter(results)