Пагинация вызывает дублирование элементов в Django
У меня есть следующее ListView
:
class SentencesListView(ListView):
model = Sentence
paginate_by = 10
def get_queryset(self):
return Sentence.objects.all().order_by('-proficiency')
Когда пользователь взаимодействует с веб-страницей, proficiency
всех Sentence
на отображаемой странице увеличивается. В результате, когда get_queryset
будет вызван снова (когда пользователь посетит следующую страницу), он увидит те же предложения, что и на предыдущей странице.
Как я могу предотвратить это?
Я пробовал следующее, но ничего не вышло:
class SentencesListView(ListView):
model = Sentence
paginate_by = 10
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.cached_query_set = None
def get_queryset(self):
if not self.request.GET.get('page') or not self.cached_query_set:
self.cached_query_set = Sentence.objects.all().order_by('-proficiency')
return self.cached_query_set
self.cached_query_set
никогда не является не None
, когда тест выполняется внутри get_queryset
. Следовательно, набор запросов всегда вычисляется заново при переходе к следующей странице.
Есть ли способ предотвратить появление дубликатов у пользователей? Или, есть ли способ предотвратить вызов get_queryset
при переходе на следующую страницу?