Django order_by не упорядочивает результаты запроса
Django не упорядочивает результаты по дате. Я использую Django-Rest-Framework для создания API для приложения, изначально у меня был фильтр по запросу, и после прочтения похожих вопросов, где люди сталкивались с той же проблемой при сочетании order_by и фильтра, я удалил фильтр и вручную отфильтровал с помощью цикла for, но все равно продолжаю получать те же результаты.
Первоначально запрос был:
progresslogs = ProgressLog.objects.filter(user__userprofile__coach=request.user).order_by('-date')
Но прочитав похожие вопросы, я изменил запрос и отфильтровал вручную, думаю, что есть проблема с использованием filter и order by вместе, но все равно получаю результаты не по порядку:
class ProgressLogAPI(APIView):
def get(self, request: Request, format=None):
if request.user.is_authenticated:
if request.user.is_staff:
logger.info('API: Staff {} fetched progress logs'.format(request.user.id))
progresslogs = ProgressLog.objects.order_by('-date')
# Below loop added to manually filter results
filteredlogs = []
for progress in progresslogs:
if progress.user.userprofile.coach == request.user:
filteredlogs.append(progress)
serializer = ProgressLogSerializer(filteredlogs, many=True)
return Response(data=serializer.data)
Но в каждом случае результаты приходят не по порядку, интересно, это какая-то ошибка в Django, я полагаю, что мог бы отсортировать результаты вручную, но думаю, что это резко увеличит время вызова API для получения результатов, поэтому не очень хочу этого делать.
Для справки ниже приведены первые 3 результата вызова API с неприменимыми данными, замененными символом '?', но по значениям дат ясно, что они вообще не упорядочены:
[
{
"id":?,
"user":?,
"front_pic":"?",
"side_pic":"?",
"back_pic":"?",
"weight":"?",
"date":"2022-04-30",
"bicep":null,
"chest":null,
"legs":null,
"waist":null,
"body_fat":null
},
{
"id":?,
"user":?,
"front_pic":"?",
"side_pic":"?",
"back_pic":"?",
"weight":"?",
"date":"2022-03-27",
"bicep":null,
"chest":null,
"legs":null,
"waist":null,
"body_fat":null
},
{
"id":?,
"user":?,
"front_pic":"?",
"side_pic":"?",
"back_pic":"?",
"weight":"?",
"date":"2022-05-22",
"bicep":null,
"chest":null,
"legs":null,
"waist":null,
"body_fat":null
},
...
]
Версия Django на сервере - 3.2.13 А версия python - 3.9
Благодарю за любую обратную связь по этому вопросу.
Не удалось решить проблему так, как я хотел, но использование ListViewAPI вместо этого, кажется, устранило ее, предполагая, что проблема может быть связана с Django-rest-фреймворком, поскольку результаты интерактивной оболочки соответствуют ожиданиям:
class ProgressLogAPI(ListAPIView):
permission_classes = [IsAdminUser]
queryset = ProgressLog.objects.filter(user__userprofile__coach=request.user).order_by('-date')
serializer_class = ProgressLogSerializer