from import_export.admin import ImportExportModelAdmin from django.contrib import admin from django.core.cache import cache from django.core.paginator import Paginator from . import models from . import resources from dati_geo_app.admin import RicercaOrdinataMixin, AjaxAutocompleteListFilterModelAdmin # Modified version of a GIST I found in a SO thread # cfr. http://masnun.rocks/2017/03/20/django-admin-expensive-count-all-queries/ class CachingPaginator(Paginator): def _get_count(self): if not hasattr(self, "_count"): self._count = None if self._count is None: try: key = "adm:{0}:count".format(hash(self.object_list.query.__str__())) self._count = cache.get(key, -1) if self._count == -1: self._count = super().count cache.set(key, self._count, 60) except: self._count = len(self.object_list) return self._count count = property(_get_count) # # Main reusable Admin class for only viewing # class ViewAdminMixin(admin.ModelAdmin): # def has_add_permission(self, request): # return False # # def has_change_permission(self, request, obj=None): # return False # # def has_delete_permission(self, request, obj=None): # return False # --------------- FINE PREFISSO TEMPLATE --------------- @admin.register(models.PersonaContattoAzienda) class PersonaContattoAziendaAdmin(ImportExportModelAdmin): # resource = resources.PersonaContattoAziendaResource # list_per_page = 15 # paginator = CachingPaginator # show_full_result_count = False pass @admin.register(models.Telefono) class TelefonoAdmin(ImportExportModelAdmin): # resource = resources.TelefonoResource # list_per_page = 15 # paginator = CachingPaginator # show_full_result_count = False pass @admin.register(models.Email) class EmailAdmin(ImportExportModelAdmin): # resource = resources.EmailResource # list_per_page = 15 # paginator = CachingPaginator # show_full_result_count = False pass @admin.register(models.PersonaFisica) class PersonaFisicaAdmin(ImportExportModelAdmin): # resource = resources.PersonaFisicaResource # list_per_page = 15 # paginator = CachingPaginator # show_full_result_count = False pass @admin.register(models.PersonaGiuridica) class PersonaGiuridicaAdmin(ImportExportModelAdmin): # resource = resources.PersonaGiuridicaResource # list_per_page = 15 # paginator = CachingPaginator # show_full_result_count = False pass @admin.register(models.Sede) class SedeAdmin(ImportExportModelAdmin): # resource = resources.SedeResource # list_per_page = 15 # paginator = CachingPaginator # show_full_result_count = False pass @admin.register(models.Fax) class FaxAdmin(ImportExportModelAdmin): # resource = resources.FaxResource # list_per_page = 15 # paginator = CachingPaginator # show_full_result_count = False pass @admin.register(models.Pec) class PecAdmin(ImportExportModelAdmin): # resource = resources.PecResource # list_per_page = 15 # paginator = CachingPaginator # show_full_result_count = False pass @admin.register(models.Indirizzo) class IndirizzoAdmin(RicercaOrdinataMixin, AjaxAutocompleteListFilterModelAdmin): list_per_page = 15 paginator = CachingPaginator show_full_result_count = False fields=('dug','duf','civico','cap','comune','altro',) search_fields = ('indirizzo','cap_id__exact',) autocomplete_fields = ('dug','cap','comune',) list_display = ('indirizzo', 'cap','comune','provincia','regione',) ordering = ('comune_id','duf','civico',) autocomplete_list_filter = ('comune',) list_filter = ('comune__provincia__regione_id',) def get_queryset(self, request): queryset = super().get_queryset(request).select_related('comune__provincia__regione').annotate(indirizzo=Concat('dug_id',Value(' '),'duf',Value(' '),'civico')) return queryset def provincia(self, obj): return obj.comune.provincia provincia.short_description = 'Provincia' provincia.admin_order_field = 'comune__provincia_id' def regione(self, obj): return obj.comune.provincia.regione_id regione.short_description = 'Regione' regione.admin_order_field = 'comune__provincia__regione_id' def indirizzo(self, obj): return obj.indirizzo indirizzo.short_description = 'Indirizzo' indirizzo.admin_order_field = ('comune_id','duf','civico',)