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}
attrs["data-linkedfields"] = json.dumps( if 'linked' in daf[db_field.name]:
list(daf[db_field.name]['linked'].keys())) attrs["data-linkedfields"] = json.dumps(
if daf[db_field.name].get('included_only', False): list(daf[db_field.name]['linked'].keys()))
attrs['data-included_only'] = 1 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( kwargs["widget"] = DrillDownAutocompleteSelect(
db_field, self.admin_site, attrs=attrs, using=db db_field, self.admin_site, attrs=attrs, using=db
) )

View File

@ -15,31 +15,33 @@
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;
var linkedfields = JSON.parse(element.dataset.linkedfields) if (element.dataset.hasOwnProperty('linkedfields')) {
var linkedfields_obj = {}; var linkedfields = JSON.parse(element.dataset.linkedfields)
var some_obj = false; var linkedfields_obj = {};
for (var i in linkedfields) { var some_obj = false;
if (linkedfields.hasOwnProperty(i)) { for (var i in linkedfields) {
var remote_field = linkedfields[i]; if (linkedfields.hasOwnProperty(i)) {
var field_id = element.dataset.select2Id; var remote_field = linkedfields[i];
var remote_id = field_id.slice(0, field_id.length - field_name.length) + remote_field; var field_id = element.dataset.select2Id;
var value = document.querySelectorAll('[data-select2-id=' + remote_id + '].admin-autocomplete')[0].value; var remote_id = field_id.slice(0, field_id.length - field_name.length) + remote_field;
if (value !== '') { var value = document.querySelectorAll('[data-select2-id=' + remote_id + '].admin-autocomplete')[0].value;
linkedfields_obj[remote_field] = value; if (value !== '') {
some_obj = true; linkedfields_obj[remote_field] = value;
some_obj = true;
}
} }
} }
} if (some_obj) {
if (some_obj) { 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;
} }