refactoring parte 2
parent
c9327e267a
commit
3c86b3a2d2
|
|
@ -142,23 +142,25 @@ class EmailAdmin(HiddenModel, PolymorphicParentModelAdmin, PolymorphicChildModel
|
||||||
|
|
||||||
ddaf={
|
ddaf={
|
||||||
'cap': {
|
'cap': {
|
||||||
'filtered_by': {
|
'relationship_path': {
|
||||||
'comune': 'comuni',
|
'comune': 'comuni',
|
||||||
},
|
},
|
||||||
'reset_on_included': {},
|
'filtered_by': [ 'comune' ],
|
||||||
|
'reset_on_included': [],
|
||||||
'reset_on_excluded': ['comune'],
|
'reset_on_excluded': ['comune'],
|
||||||
'reset_on_reset': {},
|
'reset_on_reset': [],
|
||||||
'autoupdate_on_reset': False,
|
'autoupdate_on_reset': False,
|
||||||
'autoselect_on_singleton': True,
|
'autoselect_on_singleton': True,
|
||||||
'included_only': False,
|
'included_only': False,
|
||||||
},
|
},
|
||||||
'comune': {
|
'comune': {
|
||||||
'filtered_by': {
|
'relationship_path': {
|
||||||
'cap': 'cap',
|
'cap': 'cap',
|
||||||
},
|
},
|
||||||
'reset_on_included': {},
|
'filtered_by': [ 'cap' ],
|
||||||
|
'reset_on_included': [],
|
||||||
'reset_on_excluded': ['cap'],
|
'reset_on_excluded': ['cap'],
|
||||||
'reset_on_reset': {},
|
'reset_on_reset': [],
|
||||||
'autoupdate_on_reset': False,
|
'autoupdate_on_reset': False,
|
||||||
'autoselect_on_singleton': True,
|
'autoselect_on_singleton': True,
|
||||||
'included_only': False,
|
'included_only': False,
|
||||||
|
|
|
||||||
|
|
@ -44,10 +44,10 @@ class DrillDownAutocompleteJsonView(AutocompleteJsonView):
|
||||||
|
|
||||||
self.drilldown_enabled = drilldown_enabled
|
self.drilldown_enabled = drilldown_enabled
|
||||||
if drilldown_enabled:
|
if drilldown_enabled:
|
||||||
if 'filtered_by_fields' in request.GET:
|
if 'filtered_by_dict' in request.GET:
|
||||||
try:
|
try:
|
||||||
filtered_by_fields = json.loads(
|
filtered_by_dict = json.loads(
|
||||||
request.GET.get("filtered_by_fields"))
|
request.GET.get("filtered_by_dict"))
|
||||||
except json.decoder.JSONDecodeError as e:
|
except json.decoder.JSONDecodeError as e:
|
||||||
raise PermissionDenied from e
|
raise PermissionDenied from e
|
||||||
app_label = request.GET["app_label"]
|
app_label = request.GET["app_label"]
|
||||||
|
|
@ -56,19 +56,23 @@ 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'])
|
||||||
except KeyError as e:
|
except KeyError as e:
|
||||||
raise PermissionDenied from e
|
raise PermissionDenied from e
|
||||||
remote_model = source_field.remote_field.model
|
if(set(filtered_by_dict.keys()) > filtered_by):
|
||||||
|
raise PermissionDenied
|
||||||
|
rel_paths = drilldown_field['relationship_path']
|
||||||
|
target_model = source_field.remote_field.model
|
||||||
try:
|
try:
|
||||||
for v in drilldown_field['filtered_by'].values():
|
for v in rel_paths.values():
|
||||||
remote_model._meta.get_field(v)
|
target_model._meta.get_field(v)
|
||||||
except FieldDoesNotExist as e:
|
except FieldDoesNotExist as e:
|
||||||
raise PermissionDenied from e
|
raise PermissionDenied from e
|
||||||
self.remote_model = remote_model
|
self.target_model = target_model
|
||||||
self.filtered_by_fields = filtered_by_fields
|
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 = {
|
||||||
v: filtered_by_fields[k] for k, v in drilldown_field['filtered_by'].items() if k in filtered_by_fields}
|
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
|
||||||
|
|
||||||
|
|
@ -76,7 +80,7 @@ class DrillDownAutocompleteJsonView(AutocompleteJsonView):
|
||||||
"""Return queryset based on ModelAdmin.get_search_results()."""
|
"""Return queryset based on ModelAdmin.get_search_results()."""
|
||||||
qs = super().get_queryset()
|
qs = super().get_queryset()
|
||||||
if getattr(self, 'drilldown_enabled', False):
|
if getattr(self, 'drilldown_enabled', False):
|
||||||
if hasattr(self, 'filtered_by_fields'):
|
if hasattr(self, 'filtered_by_dict'):
|
||||||
dd_field = self.drilldown_field
|
dd_field = self.drilldown_field
|
||||||
drilldown_filter_conditions = Q(**self.drilldown_filter_data)
|
drilldown_filter_conditions = Q(**self.drilldown_filter_data)
|
||||||
if dd_field.get('autoselect_on_singleton', False):
|
if dd_field.get('autoselect_on_singleton', False):
|
||||||
|
|
@ -136,8 +140,8 @@ class DrillDownAutocompleteModelAdmin(admin.options.BaseModelAdmin):
|
||||||
if db_field.name in daf:
|
if db_field.name in daf:
|
||||||
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_fields"] = json.dumps(
|
attrs["data-filtered_by"] = json.dumps(
|
||||||
list(daf[db_field.name]['filtered_by'].keys()))
|
list(daf[db_field.name]['filtered_by']))
|
||||||
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:
|
else:
|
||||||
|
|
|
||||||
|
|
@ -17,24 +17,24 @@
|
||||||
};
|
};
|
||||||
if (element.dataset.hasOwnProperty('drilldown_enabled')) {
|
if (element.dataset.hasOwnProperty('drilldown_enabled')) {
|
||||||
out.drilldown = 1;
|
out.drilldown = 1;
|
||||||
if (element.dataset.hasOwnProperty('filtered_by_fields')) {
|
if (element.dataset.hasOwnProperty('filtered_by')) {
|
||||||
var filtered_by_fields = JSON.parse(element.dataset.filtered_by_fields)
|
var filtered_by_fields = JSON.parse(element.dataset.filtered_by)
|
||||||
var filtered_by_fields_obj = {};
|
var filtered_by_dict = {};
|
||||||
var some_obj = false;
|
var some_obj = false;
|
||||||
for (var i in filtered_by_fields) {
|
for (var i in filtered_by_fields) {
|
||||||
if (filtered_by_fields.hasOwnProperty(i)) {
|
if (filtered_by_fields.hasOwnProperty(i)) {
|
||||||
var remote_field = filtered_by_fields[i];
|
var filtering_field = filtered_by_fields[i];
|
||||||
var field_id = element.dataset.select2Id;
|
var field_id = element.dataset.select2Id;
|
||||||
var remote_id = field_id.slice(0, field_id.length - field_name.length) + remote_field;
|
var filtering_field_id = field_id.slice(0, field_id.length - field_name.length) + filtering_field;
|
||||||
var value = document.querySelectorAll('[data-select2-id=' + remote_id + '].admin-autocomplete')[0].value;
|
var filtering_value = document.querySelectorAll('[data-select2-id=' + filtering_field_id + '].admin-autocomplete')[0].value;
|
||||||
if (value !== '') {
|
if (filtering_value !== '') {
|
||||||
filtered_by_fields_obj[remote_field] = value;
|
filtered_by_dict[filtering_field] = filtering_value;
|
||||||
some_obj = true;
|
some_obj = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (some_obj) {
|
if (some_obj) {
|
||||||
out['filtered_by_fields'] = JSON.stringify(filtered_by_fields_obj);
|
out['filtered_by_dict'] = JSON.stringify(filtered_by_dict);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -74,11 +74,11 @@
|
||||||
for (var i in reset_on_excluded) {
|
for (var i in reset_on_excluded) {
|
||||||
if (reset_on_excluded.hasOwnProperty(i)) {
|
if (reset_on_excluded.hasOwnProperty(i)) {
|
||||||
var field_name = element.dataset.fieldName
|
var field_name = element.dataset.fieldName
|
||||||
var remote_field = reset_on_excluded[i];
|
var field_to_reset = reset_on_excluded[i];
|
||||||
var field_id = element.dataset.select2Id;
|
var field_id = element.dataset.select2Id;
|
||||||
var remote_id = field_id.slice(0, field_id.length - field_name.length) + remote_field;
|
var id_to_reset = field_id.slice(0, field_id.length - field_name.length) + field_to_reset;
|
||||||
var remote_element = document.querySelectorAll('[data-select2-id=' + remote_id + '].admin-autocomplete')[0];
|
var element_to_reset = document.querySelectorAll('[data-select2-id=' + id_to_reset + '].admin-autocomplete')[0];
|
||||||
$(remote_element).val(null).trigger("change");
|
$(element_to_reset).val(null).trigger("change");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue