Дублирующиеся данные возникают при применении order_by ('?') И разбивки на страницы - PullRequest
1 голос
/ 04 августа 2020
@action(detail=False, methods=["get"])
    def home_list(self, request):
        data = extra_models.objects.order_by("?")
        print(data)
        paginator = self.paginator
        results = paginator.paginate_queryset(data, request)
        serializer = self.get_serializer(results, many=True)
        return self.get_paginated_response(serializer.data)

Я хочу, чтобы данные extra_models (объектов) выводились случайным образом без дублирования при каждом вызове API home_list.

Однако я хочу выводиться случайным образом но вырезал на 10 единиц. (применена опция разбивки на страницы settings.py)

Текущая проблема в том, что первые 10 появляются случайным образом, но когда появляются следующие 10, первые также смешиваются.

Другими словами, данные дублируется.

Дубликаты не встречаются на одной странице.

При переходе на следующую страницу данные с предыдущей страницы смешиваются.

Даже если вы попробуйте print (data) или print (serializer.data) посередине, дублирующиеся данные не доставляются.

Однако дублирование данных происходит из / home_list? page = 2 при вызове фактического API.

Какую часть мне следует проверить?

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Вы должны ожидать такого поведения, когда имеете дело с .order_by("?").

Каждый раз, когда запрос попадает в конец сервера, Django перемешивает объекты, а также Django не сохраняет предыдущий request или page

0 голосов
/ 04 августа 2020

Вы здесь не делаете ничего плохого. Единственная причина, почему это происходит, - order_by ("?") . API не имеет состояния, что означает, что при втором вызове API, когда вы вызываете Page = 2, он не знает, какие данные отправляются для page = 1, и возвращает случайные данные для page = 2. Единственное решение - упорядочить данные по AS C или DES C

.
...