Exemple #1
0
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)