From 7c293a0444a2d9dbfc9b2492932baf55f00e5300 Mon Sep 17 00:00:00 2001 From: tcely Date: Sun, 13 Apr 2025 12:14:36 -0400 Subject: [PATCH] Avoid `UnorderedObjectListWarning` --- tubesync/common/utils.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/tubesync/common/utils.py b/tubesync/common/utils.py index b74f0f76..eddcfe86 100644 --- a/tubesync/common/utils.py +++ b/tubesync/common/utils.py @@ -227,16 +227,22 @@ def remove_enclosed(haystack, /, open='[', close=']', sep=' ', *, valid=None, st def django_queryset_generator(query_set, /, *, page_size=100): collecting = gc.isenabled() + qs = query_set.values_list('pk', flat=True) + if not qs.ordered: + qs = qs.order_by('pk') + paginator = Paginator(qs, page_size) gc.disable() - paginator = Paginator( - query_set.values_list('pk', flat=True), - page_size, - ) for page_num in paginator.page_range: page = paginator.page(page_num) - for key in page.object_list: + keys = list(page.object_list) + for key in keys: yield query_set.filter(pk=key)[0] gc.collect(generation=1) + page = None + keys = list() + gc.collect() + paginator = None + qs = None gc.collect() if collecting: gc.enable()