Browse Source

Corrige ordenação nos filtros da API rest

master 4.0.20
Sesóstris Vieira 6 days ago
parent
commit
08d96e3344
  1. 7
      sigi/apps/eventos/views.py
  2. 15
      sigi/apps/utils/filters.py

7
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"]

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

Loading…
Cancel
Save