Skip to content

Commit

Permalink
add settable default values
Browse files Browse the repository at this point in the history
  • Loading branch information
PetrDlouhy committed Sep 11, 2020
1 parent cbb2f4c commit f677672
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 4 deletions.
11 changes: 11 additions & 0 deletions admin_tools_stats/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
# Arezqui Belaid <info@star2billing.com>
#

from django import forms
from django.contrib import admin
from django.urls import reverse
from django.utils.html import format_html
Expand Down Expand Up @@ -54,6 +55,7 @@ class DashboardStatsCriteriaInline(admin.TabularInline):
'order',
'prefix',
'use_as',
'default_option',
'criteria__dynamic_criteria_field_name',
'criteria__criteria_dynamic_mapping_preview',
)
Expand All @@ -71,6 +73,14 @@ def criteria__criteria_dynamic_mapping_preview(self, obj):
return obj.criteria.criteria_dynamic_mapping_preview()


class DashboardStatsForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['default_multiseries_criteria'].queryset = CriteriaToStatsM2M.objects.filter(
stats=self.instance,
)


@admin.register(DashboardStats)
class DashboardStatsAdmin(admin.ModelAdmin):
"""
Expand All @@ -84,6 +94,7 @@ class DashboardStatsAdmin(admin.ModelAdmin):
inlines = [DashboardStatsCriteriaInline]
ordering = ('id', )
save_as = True
form = DashboardStatsForm

def analytics_link(self, obj):
return format_html(
Expand Down
24 changes: 24 additions & 0 deletions admin_tools_stats/migrations/0008_auto_20200911_1400.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Generated by Django 3.0.10 on 2020-09-11 12:00

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('admin_tools_stats', '0007_auto_20200205_1054'),
]

operations = [
migrations.AddField(
model_name='criteriatostatsm2m',
name='default_option',
field=models.CharField(blank=True, default='', help_text='Works only with Chart filter criteri', max_length=255, verbose_name='Default filter criteria option'),
),
migrations.AddField(
model_name='dashboardstats',
name='default_multiseries_criteria',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='default_choices_stats', to='admin_tools_stats.CriteriaToStatsM2M'),
),
]
24 changes: 21 additions & 3 deletions admin_tools_stats/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,14 @@ class DashboardStats(models.Model):
default=None,
)
criteria = models.ManyToManyField(DashboardStatsCriteria, blank=True, through='CriteriaToStatsM2M')
default_multiseries_criteria = models.ForeignKey(
'CriteriaToStatsM2M',
blank=True,
null=True,
on_delete=models.SET_NULL,
# limit_choices_to={'stats__id': Value('id')}, #TODO: solve this issue and enable: https://code.djangoproject.com/ticket/25306
related_name='default_choices_stats',
)
is_visible = models.BooleanField(default=True, verbose_name=_('visible'))
created_date = models.DateTimeField(auto_now_add=True, verbose_name=_('date'))
updated_date = models.DateTimeField(auto_now=True)
Expand Down Expand Up @@ -461,7 +469,8 @@ def get_control_form(self):
for key, name in dy_map.items():
if isinstance(name, (list, tuple)):
name = name[1]
temp += '<option value="%s">%s</option>' % (key, name)
selected_str = 'selected=selected' if key == i.default_option else ''
temp += '<option value="%s" %s>%s</option>' % (key, selected_str, name)
temp += '</select>'

temp += '<input type="hidden" class="hidden_graph_key" name="graph_key" value="%s">' % self.graph_key
Expand All @@ -470,10 +479,9 @@ def get_control_form(self):
if multiple_series.exists():
temp += 'Divide: <select class="chart-input select_box_multiple_series" name="select_box_multiple_series" >'
temp += '<option class="chart-input" value="">-------</option>'
selected_str = 'selected=selected'
for serie in multiple_series.order_by('order').all():
selected_str = 'selected=selected' if serie == serie.stats.default_multiseries_criteria else ''
temp += '<option class="chart-input" value="%s" %s>%s</option>' % (serie.id, selected_str, serie.criteria.criteria_name)
selected_str = ""
temp += '</select>'

temp += 'Scale: <select class="chart-input select_box_interval" name="select_box_interval" >'
Expand Down Expand Up @@ -540,6 +548,13 @@ class Meta:
),
default='chart_filter',
)
default_option = models.CharField(
max_length=255,
verbose_name=_('Default filter criteria option'),
help_text=_('Works only with Chart filter criteri'),
default="",
blank=True,
)

def get_dynamic_criteria_field_name(self):
if self.prefix:
Expand Down Expand Up @@ -584,6 +599,9 @@ def _get_dynamic_choices(self, slef):
)
return choices

def __str__(self):
return f"{self.stats.graph_title} - {self.criteria.criteria_name}"

def get_dynamic_choices(self):
choices = self._get_dynamic_choices(self)
return choices
Expand Down
4 changes: 3 additions & 1 deletion admin_tools_stats/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,9 @@ def test_admin_dashboard_page_multi_series(self):
"true": [True, "Active"],
},
)
mommy.make('CriteriaToStatsM2M', criteria=criteria, stats=stats, use_as='multiple_series')
cm2m = mommy.make('CriteriaToStatsM2M', criteria=criteria, stats=stats, use_as='multiple_series')
stats.default_multiseries_criteria = cm2m
stats.save()
response = self.client.get('/admin/')
self.assertContains(
response,
Expand Down

0 comments on commit f677672

Please sign in to comment.