opzione included_only ora attiva e funzionante
parent
e93193585f
commit
762120134a
|
|
@ -144,6 +144,30 @@ class RecapitoInline(StackedPolymorphicInline, DrillDownAutocompleteModelAdmin):
|
||||||
class IndirizzoInline(StackedPolymorphicInline.Child, DrillDownAutocompleteModelAdmin):
|
class IndirizzoInline(StackedPolymorphicInline.Child, DrillDownAutocompleteModelAdmin):
|
||||||
model = models.Indirizzo
|
model = models.Indirizzo
|
||||||
autocomplete_fields = ('dug','comune','cap','nazione',)
|
autocomplete_fields = ('dug','comune','cap','nazione',)
|
||||||
|
drilldown_autocomplete_fields = {
|
||||||
|
'cap': {
|
||||||
|
'linked': {
|
||||||
|
'comune': 'comuni',
|
||||||
|
},
|
||||||
|
'reset_on_included': {},
|
||||||
|
'reset_on_excluded': {},
|
||||||
|
'reset_on_reset': {},
|
||||||
|
'autoupdate_on_reset': False,
|
||||||
|
'autoselect_on_singleton': True,
|
||||||
|
'included_only': True,
|
||||||
|
},
|
||||||
|
'comune': {
|
||||||
|
'linked': {
|
||||||
|
'cap': 'cap',
|
||||||
|
},
|
||||||
|
'reset_on_included': {},
|
||||||
|
'reset_on_excluded': {},
|
||||||
|
'reset_on_reset': {},
|
||||||
|
'autoupdate_on_reset': False,
|
||||||
|
'autoselect_on_singleton': True,
|
||||||
|
'included_only': False,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class SedeInline(StackedPolymorphicInline.Child):
|
class SedeInline(StackedPolymorphicInline.Child):
|
||||||
model = models.Sede
|
model = models.Sede
|
||||||
|
|
@ -277,7 +301,7 @@ class IndirizzoAdmin(HiddenModel, DrillDownAutocompleteModelAdmin, RicercaOrdina
|
||||||
'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': True,
|
||||||
},
|
},
|
||||||
'comune': {
|
'comune': {
|
||||||
'linked': {
|
'linked': {
|
||||||
|
|
@ -287,7 +311,7 @@ class IndirizzoAdmin(HiddenModel, DrillDownAutocompleteModelAdmin, RicercaOrdina
|
||||||
'reset_on_excluded': {},
|
'reset_on_excluded': {},
|
||||||
'reset_on_reset': {},
|
'reset_on_reset': {},
|
||||||
'autoupdate_on_reset': False,
|
'autoupdate_on_reset': False,
|
||||||
'autoselect_on_singleton': False,
|
'autoselect_on_singleton': True,
|
||||||
'included_only': False,
|
'included_only': False,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,22 +31,23 @@ class DrillDownAutocompleteJsonView(AutocompleteJsonView):
|
||||||
source_field,
|
source_field,
|
||||||
to_field_name
|
to_field_name
|
||||||
) = super().process_request(request)
|
) = super().process_request(request)
|
||||||
|
|
||||||
if 'drilldown' in request.GET:
|
if 'drilldown' in request.GET:
|
||||||
try:
|
try:
|
||||||
drilldown_enabled = int(request.GET.get('drilldown'))
|
drilldown_enabled = int(request.GET.get('drilldown'))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise PermissionDenied from e
|
raise PermissionDenied from e
|
||||||
try:
|
try:
|
||||||
drilldown_enabled = {1:True, 0:False}[drilldown_enabled]
|
drilldown_enabled = {1: True, 0: False}[drilldown_enabled]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise PermissionDenied from e
|
raise PermissionDenied from e
|
||||||
|
|
||||||
self.drilldown_enabled = drilldown_enabled
|
self.drilldown_enabled = drilldown_enabled
|
||||||
if drilldown_enabled:
|
if drilldown_enabled:
|
||||||
if 'linkedfields' in request.GET:
|
if 'linkedfields' in request.GET:
|
||||||
try:
|
try:
|
||||||
linkedfields = json.loads(request.GET.get("linkedfields"))
|
linkedfields = json.loads(
|
||||||
|
request.GET.get("linkedfields"))
|
||||||
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"]
|
||||||
|
|
@ -76,12 +77,17 @@ class DrillDownAutocompleteJsonView(AutocompleteJsonView):
|
||||||
qs = super().get_queryset()
|
qs = super().get_queryset()
|
||||||
if getattr(self, 'drilldown_enabled', False):
|
if getattr(self, 'drilldown_enabled', False):
|
||||||
if hasattr(self, 'linkedfields'):
|
if hasattr(self, 'linkedfields'):
|
||||||
if(self.drilldown_field['autoselect_on_singleton']):
|
dd_field = self.drilldown_field
|
||||||
self.autoselect = False
|
|
||||||
drilldown_filter_conditions = Q(**self.drilldown_filter_data)
|
drilldown_filter_conditions = Q(**self.drilldown_filter_data)
|
||||||
qs = qs.annotate(ddok=Max(Case(When(drilldown_filter_conditions, then=Value(
|
if dd_field.get('autoselect_on_singleton', False):
|
||||||
1)), default=Value(0)))).order_by('-ddok', *qs.query.order_by)
|
self.autoselect = False
|
||||||
if not getattr(self,'autoselect',True) and qs.filter(ddok=1).count() == 1:
|
if dd_field.get('included_only', False):
|
||||||
|
qs = qs.filter(drilldown_filter_conditions).annotate(
|
||||||
|
ddok=Value(1))
|
||||||
|
else:
|
||||||
|
qs = qs.annotate(ddok=Max(Case(When(drilldown_filter_conditions, then=Value(
|
||||||
|
1)), default=Value(0)))).order_by('-ddok', *qs.query.order_by)
|
||||||
|
if not getattr(self, 'autoselect', True) and qs.filter(ddok=1).count() == 1:
|
||||||
self.autoselect = True
|
self.autoselect = True
|
||||||
else:
|
else:
|
||||||
qs = qs.annotate(ddok=Value(1))
|
qs = qs.annotate(ddok=Value(1))
|
||||||
|
|
@ -92,10 +98,10 @@ class DrillDownAutocompleteJsonView(AutocompleteJsonView):
|
||||||
Convert the provided model object to a dictionary that is added to the
|
Convert the provided model object to a dictionary that is added to the
|
||||||
results list.
|
results list.
|
||||||
"""
|
"""
|
||||||
out=super().serialize_result(obj, to_field_name)
|
out = super().serialize_result(obj, to_field_name)
|
||||||
if hasattr(obj, 'ddok'):
|
if hasattr(obj, 'ddok'):
|
||||||
out['ddok'] = obj.ddok
|
out['ddok'] = obj.ddok
|
||||||
if getattr(self,'autoselect',False) and obj.ddok == 1:
|
if getattr(self, 'autoselect', False) and obj.ddok == 1:
|
||||||
out['autoselect'] = True
|
out['autoselect'] = True
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
|
@ -110,6 +116,7 @@ class DrillDownAutocompleteSelect(AutocompleteSelect, DrillDownAutocompleteMixin
|
||||||
|
|
||||||
class DrillDownAutocompleteModelAdmin(admin.options.BaseModelAdmin):
|
class DrillDownAutocompleteModelAdmin(admin.options.BaseModelAdmin):
|
||||||
drilldown_autocomplete_fields = dict()
|
drilldown_autocomplete_fields = dict()
|
||||||
|
|
||||||
class Media:
|
class Media:
|
||||||
css = {
|
css = {
|
||||||
'all': ('admin/css/drilldown_autocomplete.css',)
|
'all': ('admin/css/drilldown_autocomplete.css',)
|
||||||
|
|
@ -127,10 +134,12 @@ 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 = {
|
||||||
|
"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
|
||||||
kwargs["widget"] = DrillDownAutocompleteSelect(
|
kwargs["widget"] = DrillDownAutocompleteSelect(
|
||||||
db_field, self.admin_site, attrs={
|
db_field, self.admin_site, attrs=attrs, using=db
|
||||||
"data-linkedfields": json.dumps(list(daf[db_field.name]['linked'].keys())),
|
|
||||||
}, using=db
|
|
||||||
)
|
)
|
||||||
return super().formfield_for_foreignkey(db_field, request, **kwargs)
|
return super().formfield_for_foreignkey(db_field, request, **kwargs)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@
|
||||||
}
|
}
|
||||||
container.classList.add(styleClass);
|
container.classList.add(styleClass);
|
||||||
if (item.hasOwnProperty('autoselect')) {
|
if (item.hasOwnProperty('autoselect')) {
|
||||||
if ($(element).select2('data').length == 0) {
|
if ((element.dataset.included_only ?? false) || $(element).select2('data').length == 0) {
|
||||||
$(element).select2("trigger", "select", {
|
$(element).select2("trigger", "select", {
|
||||||
data: item
|
data: item
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue