Пагинация вызывает дублирование элементов в 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 при переходе на следующую страницу?