From 0c3786d6c7a80a28e4cc18dcfab7084937707d0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Rodrigues?= Date: Tue, 10 Mar 2020 15:57:08 -0300 Subject: [PATCH] =?UTF-8?q?Adapta=C3=A7=C3=A3o=20p/=20caso=20que=20utiliza?= =?UTF-8?q?=20MateriaEmTramitacao?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/base/views.py | 2 +- sapl/utils.py | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/sapl/base/views.py b/sapl/base/views.py index adffa11fa..305518ae0 100644 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -761,7 +761,7 @@ class RelatorioMateriasTramitacaoView(RelatorioMixin, FilterView): data['queryset'] = qs - self.total_resultados_tipos = num_materias_por_tipo(qs) + self.total_resultados_tipos = num_materias_por_tipo(qs, "materia__tipo") return data diff --git a/sapl/utils.py b/sapl/utils.py index b20443747..486bcb907 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -46,7 +46,7 @@ from sapl.settings import MAX_DOC_UPLOAD_SIZE SEPARADOR_HASH_PROPOSICAO = 'K' -def num_materias_por_tipo(qs): +def num_materias_por_tipo(qs, attr_tipo='tipo'): """ :argument um QuerySet em MateriaLegislativa :return um dict com o mapeamento {tipo: }, @@ -58,9 +58,18 @@ def num_materias_por_tipo(qs): # select_related eh importante por questoes de desempenho, pois caso # contrario ele realizara uma consulta ao banco para cada iteracao, # na key do groupby (uma alternativa é só usar tipo_id, na chave). - qs2 = qs.select_related('tipo').order_by('tipo_id') - for key, values in groupby(qs2, key=lambda m: m.tipo): - qtdes[key] = len(list(values)) + + if attr_tipo == 'tipo': + sort_function = lambda m: m.tipo + else: + sort_function = lambda m: m.materia.tipo + + qs2 = qs.select_related(attr_tipo).order_by(attr_tipo+'_id') + + for key, values in groupby(qs2, key=sort_function): + # poderia usar qtdes[key] = len(list(values)) aqui, mas + # desse modo economiza memória RAM + qtdes[key] = sum(1 for x in values) return qtdes