opzione included_only ora attiva e funzionante
parent
e93193585f
commit
762120134a
|
|
@ -144,6 +144,30 @@ class RecapitoInline(StackedPolymorphicInline, DrillDownAutocompleteModelAdmin):
|
|||
class IndirizzoInline(StackedPolymorphicInline.Child, DrillDownAutocompleteModelAdmin):
|
||||
model = models.Indirizzo
|
||||
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):
|
||||
model = models.Sede
|
||||
|
|
@ -277,7 +301,7 @@ class IndirizzoAdmin(HiddenModel, DrillDownAutocompleteModelAdmin, RicercaOrdina
|
|||
'reset_on_reset': {},
|
||||
'autoupdate_on_reset': False,
|
||||
'autoselect_on_singleton': True,
|
||||
'included_only': False,
|
||||
'included_only': True,
|
||||
},
|
||||
'comune': {
|
||||
'linked': {
|
||||
|
|
@ -287,7 +311,7 @@ class IndirizzoAdmin(HiddenModel, DrillDownAutocompleteModelAdmin, RicercaOrdina
|
|||
'reset_on_excluded': {},
|
||||
'reset_on_reset': {},
|
||||
'autoupdate_on_reset': False,
|
||||
'autoselect_on_singleton': False,
|
||||
'autoselect_on_singleton': True,
|
||||
'included_only': False,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ class DrillDownAutocompleteJsonView(AutocompleteJsonView):
|
|||
except ValueError:
|
||||
raise PermissionDenied from e
|
||||
try:
|
||||
drilldown_enabled = {1:True, 0:False}[drilldown_enabled]
|
||||
drilldown_enabled = {1: True, 0: False}[drilldown_enabled]
|
||||
except KeyError:
|
||||
raise PermissionDenied from e
|
||||
|
||||
|
|
@ -46,7 +46,8 @@ class DrillDownAutocompleteJsonView(AutocompleteJsonView):
|
|||
if drilldown_enabled:
|
||||
if 'linkedfields' in request.GET:
|
||||
try:
|
||||
linkedfields = json.loads(request.GET.get("linkedfields"))
|
||||
linkedfields = json.loads(
|
||||
request.GET.get("linkedfields"))
|
||||
except json.decoder.JSONDecodeError as e:
|
||||
raise PermissionDenied from e
|
||||
app_label = request.GET["app_label"]
|
||||
|
|
@ -76,12 +77,17 @@ class DrillDownAutocompleteJsonView(AutocompleteJsonView):
|
|||
qs = super().get_queryset()
|
||||
if getattr(self, 'drilldown_enabled', False):
|
||||
if hasattr(self, 'linkedfields'):
|
||||
if(self.drilldown_field['autoselect_on_singleton']):
|
||||
self.autoselect = False
|
||||
dd_field = self.drilldown_field
|
||||
drilldown_filter_conditions = Q(**self.drilldown_filter_data)
|
||||
if dd_field.get('autoselect_on_singleton', False):
|
||||
self.autoselect = False
|
||||
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:
|
||||
if not getattr(self, 'autoselect', True) and qs.filter(ddok=1).count() == 1:
|
||||
self.autoselect = True
|
||||
else:
|
||||
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
|
||||
results list.
|
||||
"""
|
||||
out=super().serialize_result(obj, to_field_name)
|
||||
out = super().serialize_result(obj, to_field_name)
|
||||
if hasattr(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
|
||||
return out
|
||||
|
||||
|
|
@ -110,6 +116,7 @@ class DrillDownAutocompleteSelect(AutocompleteSelect, DrillDownAutocompleteMixin
|
|||
|
||||
class DrillDownAutocompleteModelAdmin(admin.options.BaseModelAdmin):
|
||||
drilldown_autocomplete_fields = dict()
|
||||
|
||||
class Media:
|
||||
css = {
|
||||
'all': ('admin/css/drilldown_autocomplete.css',)
|
||||
|
|
@ -127,10 +134,12 @@ class DrillDownAutocompleteModelAdmin(admin.options.BaseModelAdmin):
|
|||
if "widget" not in kwargs:
|
||||
daf = self.get_drilldown_autocomplete_fields(request)
|
||||
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(
|
||||
db_field, self.admin_site, attrs={
|
||||
"data-linkedfields": json.dumps(list(daf[db_field.name]['linked'].keys())),
|
||||
}, using=db
|
||||
db_field, self.admin_site, attrs=attrs, using=db
|
||||
)
|
||||
return super().formfield_for_foreignkey(db_field, request, **kwargs)
|
||||
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@
|
|||
}
|
||||
container.classList.add(styleClass);
|
||||
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", {
|
||||
data: item
|
||||
})
|
||||
|
|
|
|||
Loading…
Reference in New Issue