From c908b0574001c5666a409f99fc4d43a320e35320 Mon Sep 17 00:00:00 2001 From: Philipp Thumfart Date: Sat, 14 Mar 2026 17:27:39 +0100 Subject: [PATCH] Added missing logic to reset multi select (#659) --- constance/admin.py | 6 ++ constance/static/admin/js/constance.js | 11 ++++ .../constance/includes/results_list.html | 2 + tests/test_admin.py | 56 +++++++++++++++++++ 4 files changed, 75 insertions(+) diff --git a/constance/admin.py b/constance/admin.py index 683c2d2..188f32e 100644 --- a/constance/admin.py +++ b/constance/admin.py @@ -1,3 +1,4 @@ +import json from collections import OrderedDict from datetime import date from datetime import datetime @@ -62,8 +63,13 @@ class ConstanceAdmin(admin.ModelAdmin): "is_date": isinstance(default, date), "is_datetime": isinstance(default, datetime), "is_checkbox": isinstance(form_field.field.widget, forms.CheckboxInput), + "is_multi_select": isinstance( + form_field.field.widget, (forms.SelectMultiple, forms.CheckboxSelectMultiple) + ), "is_file": isinstance(form_field.field.widget, forms.FileInput), } + if config_value["is_multi_select"]: + config_value["json_default"] = json.dumps(default if isinstance(default, list) else [default]) if field_type and field_type in settings.ADDITIONAL_FIELDS: serialized_default = form[name].field.prepare_value(default) config_value["default"] = serialized_default diff --git a/constance/static/admin/js/constance.js b/constance/static/admin/js/constance.js index d828592..1cea255 100644 --- a/constance/static/admin/js/constance.js +++ b/constance/static/admin/js/constance.js @@ -12,6 +12,17 @@ if (fieldType === 'checkbox') { field.prop('checked', this.dataset.default === 'true'); + } else if (fieldType === 'multi-select') { + const defaults = JSON.parse(this.dataset.default); + const stringDefaults = defaults.map(function(v) { return String(v); }); + // CheckboxSelectMultiple: individual checkboxes inside a wrapper + field.find('input[type="checkbox"]').each(function() { + $(this).prop('checked', stringDefaults.indexOf($(this).val()) !== -1); + }); + // SelectMultiple: