From c449d4512d08d9659f7aabf674e108d67e65ba73 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Mon, 11 Apr 2016 13:32:57 -0300 Subject: [PATCH] Reduz o override no metodo get, sobrescrevendo o metodo get_filterset_kwargs de FilterView --- materia/forms.py | 4 ++-- materia/views.py | 61 +++++++++++++++++++++++++++--------------------- 2 files changed, 36 insertions(+), 29 deletions(-) diff --git a/materia/forms.py b/materia/forms.py index 5ca5aa385..2920ae268 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -21,7 +21,7 @@ from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria, Tramitacao) -ANO_VAZIO = [('', '---------')] + RANGE_ANOS +ANO_CHOICES = [('', '---------')] + RANGE_ANOS def em_tramitacao(): @@ -628,7 +628,7 @@ class MateriaLegislativaFilterSet(django_filters.FilterSet): ano = django_filters.ChoiceFilter(required=False, label=u'Ano da Matéria', - choices=ANO_VAZIO, + choices=ANO_CHOICES, help_text="") class Meta: diff --git a/materia/views.py b/materia/views.py index 03c9443f4..fc5d52854 100644 --- a/materia/views.py +++ b/materia/views.py @@ -1199,6 +1199,36 @@ class MateriaLegislativaPesquisaView(FilterView): filterset_class = MateriaLegislativaFilterSet paginate_by = 10 + def get_filterset_kwargs(self, filterset_class): + """ + Returns the keyword arguments for instanciating the filterset. + """ + kwargs = {'data': self.request.GET or None} + + status_tramitacao = self.request.GET.get('tramitacao__status') + unidade_destino = self.request.GET.get( + 'tramitacao__unidade_tramitacao_destino') + + qs = self.get_queryset() + + if status_tramitacao and unidade_destino: + lista = filtra_tramitacao_destino_and_status(status_tramitacao, + unidade_destino) + qs = qs.filter(id__in=lista).distinct() + + elif status_tramitacao: + lista = filtra_tramitacao_status(status_tramitacao) + qs = qs.filter(id__in=lista).distinct() + + elif unidade_destino: + lista = filtra_tramitacao_destino(unidade_destino) + qs = qs.filter(id__in=lista).distinct() + + kwargs.update({ + 'queryset': qs, + }) + return kwargs + def get_context_data(self, **kwargs): context = super(MateriaLegislativaPesquisaView, self).get_context_data(**kwargs) @@ -1212,36 +1242,13 @@ class MateriaLegislativaPesquisaView(FilterView): return context def get(self, request, *args, **kwargs): - filterset_class = self.get_filterset_class() - self.filterset = self.get_filterset(filterset_class) - - data = self.filterset.data - - status_tramitacao = data.get('tramitacao__status') - unidade_destino = data.get('tramitacao__unidade_tramitacao_destino') - - if status_tramitacao and unidade_destino: - lista = filtra_tramitacao_destino_and_status(status_tramitacao, - unidade_destino) - self.object_list = self.filterset.qs.filter( - id__in=lista).distinct() - - elif status_tramitacao: - lista = filtra_tramitacao_status(status_tramitacao) - self.object_list = self.filterset.qs.filter( - id__in=lista).distinct() - - elif unidade_destino: - lista = filtra_tramitacao_destino(unidade_destino) - self.object_list = self.filterset.qs.filter( - id__in=lista).distinct() - else: - self.object_list = self.filterset.qs + super(MateriaLegislativaPesquisaView, self).get(request) # Se a pesquisa estiver quebrando com a paginação # Olhe esta função abaixo # Provavelmente você criou um novo campo no Form/Field # Então a ordem da URL está diferente + data = self.filterset.data if (data and data.get('tipo') is not None): url = "&"+str(self.request.environ['QUERY_STRING']) if url[:5] == "&page": @@ -1250,14 +1257,14 @@ class MateriaLegislativaPesquisaView(FilterView): else: url = '' + self.filterset.form.fields['o'].label = _('Ordenação') + context = self.get_context_data(filter=self.filterset, object_list=self.object_list, filter_url=url, numero_res=len(self.object_list) ) - self.filterset.form.fields['o'].label = _('Ordenação') - return self.render_to_response(context)