opzione reset_on_excluded ora attiva e funzionante

my-submodulepoetico
Guido Longoni 2023-07-05 20:28:41 +02:00
parent 6e8b725ba7
commit 4a1d96cf11
2 changed files with 52 additions and 22 deletions

View File

@ -134,11 +134,16 @@ class DrillDownAutocompleteModelAdmin(admin.options.BaseModelAdmin):
if "widget" not in kwargs: if "widget" not in kwargs:
daf = self.get_drilldown_autocomplete_fields(request) daf = self.get_drilldown_autocomplete_fields(request)
if db_field.name in daf: if db_field.name in daf:
attrs = {} attrs = {'data-drilldown_enabled': 1}
if 'linked' in daf[db_field.name]:
attrs["data-linkedfields"] = json.dumps( attrs["data-linkedfields"] = json.dumps(
list(daf[db_field.name]['linked'].keys())) list(daf[db_field.name]['linked'].keys()))
if daf[db_field.name].get('included_only', False): if daf[db_field.name].get('included_only', False):
attrs['data-included_only'] = 1 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( kwargs["widget"] = DrillDownAutocompleteSelect(
db_field, self.admin_site, attrs=attrs, using=db db_field, self.admin_site, attrs=attrs, using=db
) )

View File

@ -15,8 +15,9 @@
model_name: element.dataset.modelName, model_name: element.dataset.modelName,
field_name: field_name field_name: field_name
}; };
if (element.dataset.hasOwnProperty('linkedfields')) { if (element.dataset.hasOwnProperty('drilldown_enabled')) {
out.drilldown = 1; out.drilldown = 1;
if (element.dataset.hasOwnProperty('linkedfields')) {
var linkedfields = JSON.parse(element.dataset.linkedfields) var linkedfields = JSON.parse(element.dataset.linkedfields)
var linkedfields_obj = {}; var linkedfields_obj = {};
var some_obj = false; var some_obj = false;
@ -36,10 +37,11 @@
out['linkedfields'] = JSON.stringify(linkedfields_obj); out['linkedfields'] = JSON.stringify(linkedfields_obj);
} }
} }
}
return out return out
} }
}; };
if (element.dataset.hasOwnProperty('linkedfields')) { if (element.dataset.hasOwnProperty('drilldown_enabled')) {
select2_config.templateResult = (item,container)=>{ select2_config.templateResult = (item,container)=>{
var styleClass = ''; var styleClass = '';
@ -62,6 +64,29 @@
} }
} }
$(element).select2(select2_config); $(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; return this;
} }