From 52d1de43bd10f19e847747f05069f877ac8f5c47 Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Wed, 27 Apr 2022 18:03:08 +0200 Subject: [PATCH] dataviz: reload chart filters cell to reflect subfilters (#62533) --- combo/apps/dataviz/forms.py | 6 ++++ combo/apps/dataviz/models.py | 13 +++++++- .../templates/combo/chart-filters.html | 17 ++++++++++ .../dataviz/templates/combo/chartngcell.html | 16 +++++----- combo/apps/dataviz/views.py | 21 +++++++++++- combo/public/static/js/combo.public.js | 7 +++- tests/test_dataviz.py | 32 +++++++++++++++++++ 7 files changed, 101 insertions(+), 11 deletions(-) diff --git a/combo/apps/dataviz/forms.py b/combo/apps/dataviz/forms.py index 768f9316..cccc9f65 100644 --- a/combo/apps/dataviz/forms.py +++ b/combo/apps/dataviz/forms.py @@ -19,6 +19,7 @@ from collections import OrderedDict from django import forms from django.conf import settings +from django.core.cache import cache from django.db import transaction from django.db.models import Q from django.db.models.fields import BLANK_CHOICE_DASH @@ -275,6 +276,7 @@ class ChartFiltersForm(ChartFiltersMixin, forms.ModelForm): def __init__(self, *args, **kwargs): page = kwargs.pop('page') + filters_cell_id = kwargs.pop('filters_cell_id', None) super().__init__(*args, **kwargs) chart_cells = list(ChartNgCell.objects.filter(page=page, statistic__isnull=False).order_by('order')) @@ -282,6 +284,10 @@ class ChartFiltersForm(ChartFiltersMixin, forms.ModelForm): self.fields.clear() return + if filters_cell_id: + for cell in chart_cells: + cell.subfilters = cache.get(cell.get_cache_key(filters_cell_id), cell.subfilters) + first_cell = chart_cells[0] for field in self._meta.fields: self.fields[field].initial = getattr(first_cell, field) diff --git a/combo/apps/dataviz/models.py b/combo/apps/dataviz/models.py index df295b6e..108281f8 100644 --- a/combo/apps/dataviz/models.py +++ b/combo/apps/dataviz/models.py @@ -727,6 +727,9 @@ class ChartNgCell(CellBase): self.filter_params = {k: v for k, v in self.filter_params.items() if k in subfilter_ids} self.save() + def get_cache_key(self, filters_cell_id): + return 'dataviz:%s:%s' % (filters_cell_id, self.pk) + @register_cell_class class ChartFiltersCell(CellBase): @@ -745,5 +748,13 @@ class ChartFiltersCell(CellBase): from .forms import ChartFiltersForm ctx = super().get_cell_extra_context(context) - ctx['form'] = ChartFiltersForm(page=self.page) + if 'filters_cell_id' in context['request'].GET: # detect refresh on submit + ctx['form'] = ChartFiltersForm( + data=context['request'].GET, + page=self.page, + filters_cell_id=context['request'].GET['filters_cell_id'], + ) + else: + ctx['form'] = ChartFiltersForm(page=self.page) + return ctx diff --git a/combo/apps/dataviz/templates/combo/chart-filters.html b/combo/apps/dataviz/templates/combo/chart-filters.html index 496dbb1b..3d47d893 100644 --- a/combo/apps/dataviz/templates/combo/chart-filters.html +++ b/combo/apps/dataviz/templates/combo/chart-filters.html @@ -23,6 +23,20 @@ diff --git a/combo/apps/dataviz/templates/combo/chartngcell.html b/combo/apps/dataviz/templates/combo/chartngcell.html index 489ad98c..e725dcc1 100644 --- a/combo/apps/dataviz/templates/combo/chartngcell.html +++ b/combo/apps/dataviz/templates/combo/chartngcell.html @@ -5,11 +5,12 @@