From 08d96e33449c24022a77ab0c6509089a756e6885 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ses=C3=B3stris=20Vieira?= Date: Mon, 27 Apr 2026 21:34:56 -0300 Subject: [PATCH] =?UTF-8?q?Corrige=20ordena=C3=A7=C3=A3o=20nos=20filtros?= =?UTF-8?q?=20da=20API=20rest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sigi/apps/eventos/views.py | 7 ++++--- sigi/apps/utils/filters.py | 15 +++++++++------ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/sigi/apps/eventos/views.py b/sigi/apps/eventos/views.py index a062209..8a8e62a 100644 --- a/sigi/apps/eventos/views.py +++ b/sigi/apps/eventos/views.py @@ -5,7 +5,7 @@ import locale import pandas as pd from functools import reduce from itertools import groupby -from rest_framework import generics, filters +from rest_framework import generics from typing import OrderedDict from django.contrib import messages from django.contrib.admin.views.decorators import staff_member_required @@ -59,6 +59,7 @@ from sigi.apps.eventos.serializers import ( ) from sigi.apps.servidores.models import Servidor from sigi.apps.utils.views import ReportListView +from sigi.apps.utils.filters import DeterministicOrderingFilter class AlunosPorUfReportView( @@ -1140,7 +1141,7 @@ class ApiEventoAbstract: Evento.objects.filter(publicar=True) .exclude(data_inicio=None) .exclude(data_termino=None) - .order_by("-data_inicio") + .order_by("-data_inicio", "id") ) serializer_class = EventoSerializer @@ -1151,7 +1152,7 @@ class ApiEventoList(ApiEventoAbstract, generics.ListAPIView): """ serializer_class = EventoListSerializer - filter_backends = [filters.OrderingFilter] + filter_backends = [DeterministicOrderingFilter] ordering_fields = "__all__" ordering = ["-data_inicio"] diff --git a/sigi/apps/utils/filters.py b/sigi/apps/utils/filters.py index d5d4373..f54df4c 100644 --- a/sigi/apps/utils/filters.py +++ b/sigi/apps/utils/filters.py @@ -9,6 +9,13 @@ from django.contrib.admin.utils import ( ) from django.core.exceptions import ValidationError from django.utils.translation import ngettext, gettext as _ +from rest_framework.filters import OrderingFilter + + +class DeterministicOrderingFilter(OrderingFilter): + def filter_queryset(self, request, queryset, view): + queryset = super().filter_queryset(request, queryset, view) + return queryset.order_by(*queryset.query.order_by, "id") def filter_single_value(value): @@ -54,9 +61,7 @@ class RangeFilter(admin.FieldListFilter): self.model_admin = model_admin self.parameter_name = f"{field_path}__range" - super().__init__( - field, request, params, model, model_admin, field_path - ) + super().__init__(field, request, params, model, model_admin, field_path) lookup_choices = self.lookups(request, model_admin) @@ -179,9 +184,7 @@ class DateRangeFilter(admin.FieldListFilter): form_data[p] = prepare_lookup_value( p, value, self.list_separator ) - super().__init__( - field, request, params, model, model_admin, field_path - ) + super().__init__(field, request, params, model, model_admin, field_path) form = self.get_date_form(form_data) if form.is_valid(): self.used_parameters = {