Browse Source

Reduz o override no metodo get, sobrescrevendo o metodo get_filterset_kwargs de FilterView

pull/282/head
Eduardo Calil 9 years ago
parent
commit
c449d4512d
  1. 4
      materia/forms.py
  2. 61
      materia/views.py

4
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:

61
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)

Loading…
Cancel
Save