From 4a1d96cf1160b5869545dfe5d6c07bf1a8755efd Mon Sep 17 00:00:00 2001 From: Guido Longoni Date: Wed, 5 Jul 2023 20:28:41 +0200 Subject: [PATCH] opzione reset_on_excluded ora attiva e funzionante --- django/contatti_app/drilldown_autocomplete.py | 15 +++-- django/static/admin/js/autocomplete.js | 59 +++++++++++++------ 2 files changed, 52 insertions(+), 22 deletions(-) diff --git a/django/contatti_app/drilldown_autocomplete.py b/django/contatti_app/drilldown_autocomplete.py index e39c257..991adb3 100644 --- a/django/contatti_app/drilldown_autocomplete.py +++ b/django/contatti_app/drilldown_autocomplete.py @@ -134,11 +134,16 @@ class DrillDownAutocompleteModelAdmin(admin.options.BaseModelAdmin): if "widget" not in kwargs: daf = self.get_drilldown_autocomplete_fields(request) if db_field.name in daf: - attrs = {} - attrs["data-linkedfields"] = json.dumps( - list(daf[db_field.name]['linked'].keys())) - if daf[db_field.name].get('included_only', False): - attrs['data-included_only'] = 1 + attrs = {'data-drilldown_enabled': 1} + if 'linked' in daf[db_field.name]: + attrs["data-linkedfields"] = json.dumps( + list(daf[db_field.name]['linked'].keys())) + if daf[db_field.name].get('included_only', False): + attrs['data-included_only'] = 1 + else: + if 'reset_on_excluded' in daf[db_field.name]: + attrs['data-reset_on_excluded'] = json.dumps( + list(daf[db_field.name]['reset_on_excluded'])) kwargs["widget"] = DrillDownAutocompleteSelect( db_field, self.admin_site, attrs=attrs, using=db ) diff --git a/django/static/admin/js/autocomplete.js b/django/static/admin/js/autocomplete.js index 1e37f2a..2680046 100644 --- a/django/static/admin/js/autocomplete.js +++ b/django/static/admin/js/autocomplete.js @@ -15,31 +15,33 @@ model_name: element.dataset.modelName, field_name: field_name }; - if (element.dataset.hasOwnProperty('linkedfields')) { + if (element.dataset.hasOwnProperty('drilldown_enabled')) { out.drilldown = 1; - var linkedfields = JSON.parse(element.dataset.linkedfields) - var linkedfields_obj = {}; - var some_obj = false; - for (var i in linkedfields) { - if (linkedfields.hasOwnProperty(i)) { - var remote_field = linkedfields[i]; - var field_id = element.dataset.select2Id; - var remote_id = field_id.slice(0, field_id.length - field_name.length) + remote_field; - var value = document.querySelectorAll('[data-select2-id=' + remote_id + '].admin-autocomplete')[0].value; - if (value !== '') { - linkedfields_obj[remote_field] = value; - some_obj = true; + if (element.dataset.hasOwnProperty('linkedfields')) { + var linkedfields = JSON.parse(element.dataset.linkedfields) + var linkedfields_obj = {}; + var some_obj = false; + for (var i in linkedfields) { + if (linkedfields.hasOwnProperty(i)) { + var remote_field = linkedfields[i]; + var field_id = element.dataset.select2Id; + var remote_id = field_id.slice(0, field_id.length - field_name.length) + remote_field; + var value = document.querySelectorAll('[data-select2-id=' + remote_id + '].admin-autocomplete')[0].value; + if (value !== '') { + linkedfields_obj[remote_field] = value; + some_obj = true; + } } } - } - if (some_obj) { - out['linkedfields'] = JSON.stringify(linkedfields_obj); + if (some_obj) { + out['linkedfields'] = JSON.stringify(linkedfields_obj); + } } } return out } }; - if (element.dataset.hasOwnProperty('linkedfields')) { + if (element.dataset.hasOwnProperty('drilldown_enabled')) { select2_config.templateResult = (item,container)=>{ var styleClass = ''; @@ -62,6 +64,29 @@ } } $(element).select2(select2_config); + if (element.dataset.hasOwnProperty('reset_on_excluded')) { + $(element).on('select2:select', ev=>{ + var data = $(element).select2('data'); + if (Array.isArray(data) && data.length > 0) { + var ddok = data[0].ddok; + if (!(ddok ?? true)) { + var reset_on_excluded = JSON.parse(element.dataset.reset_on_excluded); + for (var i in reset_on_excluded) { + if (reset_on_excluded.hasOwnProperty(i)) { + var field_name = element.dataset.fieldName + var remote_field = reset_on_excluded[i]; + var field_id = element.dataset.select2Id; + var remote_id = field_id.slice(0, field_id.length - field_name.length) + remote_field; + var remote_element = document.querySelectorAll('[data-select2-id=' + remote_id + '].admin-autocomplete')[0]; + $(remote_element).val(null).trigger("change"); + } + } + } + } + } + ); + } + }); return this; }