Django Query не упорядочивает/сортирует правильно в модели пагинации в rest framework

У меня есть 705 Meta#Data видеороликов Instagram, но я не могу отсортировать их по имени | id | дате загрузки или любому другому запросу. Моя модель метаданных имеет вид

class MetaData(models.Model):
# Info
id = models.IntegerField(primary_key=True)
tag = models.CharField(max_length=500)
# User Info
username = models.CharField(max_length=400)
followers = models.IntegerField()
verified = models.BooleanField()
profile = models.URLField()
# Video Info
upload_date = models.DateField()
upload_time = models.TimeField()
views = models.IntegerField()
duration = models.CharField(max_length=50)
comments = models.IntegerField()
likes = models.IntegerField()
dimension = models.CharField(max_length=50)
framerate = models.CharField(
    max_length=100, blank=True, default='Not Found')
# Post
link = models.URLField()
codecs = models.CharField(max_length=200, blank=True, default='Not Found')
caption = models.CharField(max_length=100, blank=True, default='Not Set')
status = models.CharField(max_length=20, choices=(
    ('Pending', 'Pending'), ('Acquired', 'Acquired'), ('Rejected', 'Rejected')), default='Pending')

Я использую Django rest framework pagination и получаю поля моих фильтров в параметрах

def fetchVideosContentwithFilter(request, filters, directory=None):
    paginator = PageNumberPagination()
    paginator.page_size = 12
    # Parameters
    flts = ['upload_date']
    if filters:
        flts = json.loads(filters)
    if 'upload_date' in flts:
        flts.append('upload_time')
    if directory and directory != 'all':
        objs = MetaData.objects.filter(tag=directory)
    else:
        objs = MetaData.objects.all()
    pages = paginator.paginate_queryset(objs.order_by(*flts), request)
    query = s.MetaDataSerializer(pages, many=True)
    return paginator.get_paginated_response(query.data)

Я также пытаюсь или заменяю

*paginator.paginate_queryset(objs.order_by(flts), request) with paginator.paginate_queryset(objs.order_by('-id'), request) но напрасно, данные не упорядочиваются правильно

.

Возможно, вы можете решить свою задачу с помощью DRF's ListAPIView.

from rest_framework.filters import OrderingFilter
from rest_framework.generics import ListAPIView
from rest_framework.pagination import PageNumberPagination


# Your custom pagination
class DefaultPagePagination(PageNumberPagination):
    max_page_size = 100
    page_size_query_param = "page_size"
    page_size = 12


# Your view
class FetchVideosContentwithFilter(ListAPIView):
    serializer_class = MetaDataSerializer
    pagination_class = DefaultPagePagination
    filter_backends = [
        OrderingFilter,
    ]
    ordering_fields = ["title", "created_at", "updated_at"]

    def get_queryset(self):
        # I'm not sure, how you get the directory param.
        # I assume, you take it from query_params
        directory = self.request.query_params.get('directory')
        if directory and directory != 'all':
            objs = MetaData.objects.filter(tag=directory)
        else:
            objs = MetaData.objects.all()
        return objs

ListAPIView использует ListModelMixin, который реализует логику пагинации

class ListModelMixin:
    """
    List a queryset.
    """
    def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())

        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)

        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)
Вернуться на верх