reset_on_reset da testare

my-submodulepoetico
Guido Longoni 2023-07-06 02:04:39 +02:00
parent a273ea4ea2
commit 9d4b789338
1 changed files with 27 additions and 5 deletions

View File

@ -56,10 +56,10 @@ class DrillDownAutocompleteJsonView(AutocompleteJsonView):
try: try:
drilldown_field = self.admin_site._registry[ drilldown_field = self.admin_site._registry[
source_model].get_drilldown_autocomplete_fields(request)[source_field.name] source_model].get_drilldown_autocomplete_fields(request)[source_field.name]
filtered_by = set(drilldown_field['filtered_by']) filtered_by = set(drilldown_field['filtered_by'])
except KeyError as e: except KeyError as e:
raise PermissionDenied from e raise PermissionDenied from e
if(set(filtered_by_dict.keys()) > filtered_by): if (set(filtered_by_dict.keys()) > filtered_by):
raise PermissionDenied raise PermissionDenied
rel_paths = drilldown_field['relationship_path'] rel_paths = drilldown_field['relationship_path']
target_model = source_field.remote_field.model target_model = source_field.remote_field.model
@ -72,7 +72,7 @@ class DrillDownAutocompleteJsonView(AutocompleteJsonView):
self.filtered_by_dict = filtered_by_dict self.filtered_by_dict = filtered_by_dict
self.drilldown_field = drilldown_field self.drilldown_field = drilldown_field
self.drilldown_filter_data = { self.drilldown_filter_data = {
rel_paths[k]: v for k,v in filtered_by_dict.items()} rel_paths[k]: v for k, v in filtered_by_dict.items()}
return term, model_admin, source_field, to_field_name return term, model_admin, source_field, to_field_name
@ -138,6 +138,19 @@ 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:
def get_fields_to_reset_recursive(daf, fields_to_reset, seen=None):
to_reset = set()
if seen is None:
seen = set()
for f in fields_to_reset:
if f in daf:
to_reset.add(f)
if f not in seen and 'reset_on_reset' in daf[f]:
seen.add(f)
to_reset.update(get_fields_to_reset_recursive(
daf, daf[f]['reset_on_reset'], seen))
return to_reset
attrs = {'data-drilldown_enabled': 1} attrs = {'data-drilldown_enabled': 1}
if 'filtered_by' in daf[db_field.name]: if 'filtered_by' in daf[db_field.name]:
attrs["data-filtered_by"] = json.dumps( attrs["data-filtered_by"] = json.dumps(
@ -146,11 +159,20 @@ class DrillDownAutocompleteModelAdmin(admin.options.BaseModelAdmin):
attrs['data-included_only'] = 1 attrs['data-included_only'] = 1
else: else:
if 'reset_on_excluded' in daf[db_field.name]: if 'reset_on_excluded' in daf[db_field.name]:
reset_on_excluded = set(
daf[db_field.name]['reset_on_excluded'])
reset_on_excluded = get_fields_to_reset_recursive(
daf, reset_on_excluded)
attrs['data-reset_on_excluded'] = json.dumps( attrs['data-reset_on_excluded'] = json.dumps(
list(daf[db_field.name]['reset_on_excluded'])) list(reset_on_excluded))
if 'reset_on_included' in daf[db_field.name]: if 'reset_on_included' in daf[db_field.name]:
reset_on_included = set(
daf[db_field.name]['reset_on_included'])
reset_on_included = get_fields_to_reset_recursive(
daf, reset_on_included)
attrs['data-reset_on_included'] = json.dumps( attrs['data-reset_on_included'] = json.dumps(
list(daf[db_field.name]['reset_on_included'])) list(reset_on_included))
kwargs["widget"] = DrillDownAutocompleteSelect( kwargs["widget"] = DrillDownAutocompleteSelect(
db_field, self.admin_site, attrs=attrs, using=db db_field, self.admin_site, attrs=attrs, using=db
) )