Django REST Framework пагинация изменение модели упорядочивание
По какой-то причине, когда я запускаю paginate_queryset(queryset)
, порядок меняется и не является тем, который я хочу.
У меня есть модель:
class MyModel(models.Model):
name = models.CharField(max_length=100)
history_date = models.DateTimeField()
class Meta:
managed = False
db_table = 'myapp_historicalmymodel'
ordering = ("-history_date",)
С установленным полем ordering
.
Тогда у меня есть дополнительное действие в ViewSet
:
class MyModelViewSet(viewsets.ModelViewSet):
serializer_class = MyModelSerializer
permission_classes = [permissions.IsAuthenticated]
queryset = MyModel.objects.all()
@action(detail=False, methods=['get'], url_path='history', url_name='history')
def history(self, request):
items = HistoricalMyModel.objects.all()
print(items) # FIRST PRINT
page = self.paginate_queryset(items)
print(page) # SECOND PRINT
if page is not None:
serializer = HistoricalMyModelSerializer(page, many=True, context={'request': request})
return self.get_paginated_response(serializer.data)
serializer = HistoricalMyModelSerializer(items, many=True)
return Response(serializer.data)
Первый print
печатает элементы в настроенном порядке, используя ordering = ("-history_date",)
, например:
<QuerySet [<HistoricalMyModel: HistoricalMyModel object (4)>, <HistoricalMyModel: HistoricalMyModel object (3)>, <HistoricalMyModel: HistoricalMyModel object (2)>, <HistoricalMyModel: HistoricalMyModel object (1)>]>
Здесь вы можете увидеть порядок 4,3,2,1.
Но второй print
выводит элементы в каком-то стандартном порядке Postgres, кажется:
[<HistoricalMyModel: HistoricalMyModel object (3)>, <HistoricalMyModel: HistoricalMyModel object (4)>, <HistoricalMyModel: HistoricalMyModel object (1)>, <HistoricalMyModel: HistoricalMyModel object (2)>]
Здесь вы можете увидеть порядок 3,4,1,2.
Почему после выполнения items
меняется порядок self.paginate_queryset(items)
?