144 lines
4.5 KiB
Python
144 lines
4.5 KiB
Python
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',)
|