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 = {