contatti admin wip
parent
3fc0f7ae2b
commit
2795bd1a8c
|
|
@ -1,10 +1,18 @@
|
||||||
from import_export.admin import ImportExportModelAdmin
|
from dati_geo_app.admin import (AjaxAutocompleteListFilterModelAdmin,
|
||||||
|
RicercaOrdinataMixin)
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from django.core.paginator import Paginator
|
from django.core.paginator import Paginator
|
||||||
from . import models
|
from django.db.models import Case, Count, Value, When
|
||||||
from . import resources
|
from django.db.models.functions import Concat
|
||||||
from dati_geo_app.admin import RicercaOrdinataMixin, AjaxAutocompleteListFilterModelAdmin
|
from import_export.admin import ImportExportModelAdmin
|
||||||
|
from polymorphic.admin import (PolymorphicChildModelAdmin,
|
||||||
|
PolymorphicChildModelFilter,
|
||||||
|
PolymorphicInlineSupportMixin,
|
||||||
|
PolymorphicParentModelAdmin,
|
||||||
|
StackedPolymorphicInline)
|
||||||
|
|
||||||
|
from . import models, resources
|
||||||
|
|
||||||
# Modified version of a GIST I found in a SO thread
|
# Modified version of a GIST I found in a SO thread
|
||||||
# cfr. http://masnun.rocks/2017/03/20/django-admin-expensive-count-all-queries/
|
# cfr. http://masnun.rocks/2017/03/20/django-admin-expensive-count-all-queries/
|
||||||
|
|
@ -51,16 +59,30 @@ class PersonaContattoAziendaAdmin(ImportExportModelAdmin):
|
||||||
|
|
||||||
|
|
||||||
@admin.register(models.VoceContattoRubrica)
|
@admin.register(models.VoceContattoRubrica)
|
||||||
class VoceContattoRubricaAdmin(ImportExportModelAdmin):
|
class VoceContattoRubricaAdmin(ImportExportModelAdmin, PolymorphicParentModelAdmin):
|
||||||
# resource = resources.VoceContattoRubricaResource
|
# resource = resources.VoceContattoRubricaResource
|
||||||
# list_per_page = 15
|
# list_per_page = 15
|
||||||
# paginator = CachingPaginator
|
# paginator = CachingPaginator
|
||||||
# show_full_result_count = False
|
# show_full_result_count = False
|
||||||
|
child_models = (models.Indirizzo, models.Email, models.Telefono, models.Fax,)
|
||||||
|
list_filter = (PolymorphicChildModelFilter,)
|
||||||
|
readonly_fields = ('descrizione','tipo',)
|
||||||
|
list_display = ('soggetto','descrizione','tipo',)
|
||||||
|
|
||||||
|
def descrizione(self,obj):
|
||||||
|
return str(getattr(obj,obj.polymorphic_ctype.model))
|
||||||
|
|
||||||
|
def tipo(self, obj):
|
||||||
|
return getattr(obj,obj.polymorphic_ctype.model)._meta.verbose_name.title()
|
||||||
|
|
||||||
|
def get_queryset(self, request):
|
||||||
|
qs=super().get_queryset(request).prefetch_related('polymorphic_ctype')
|
||||||
|
return qs
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@admin.register(models.Telefono)
|
@admin.register(models.Telefono)
|
||||||
class TelefonoAdmin(ImportExportModelAdmin):
|
class TelefonoAdmin(ImportExportModelAdmin, PolymorphicChildModelAdmin):
|
||||||
# resource = resources.TelefonoResource
|
# resource = resources.TelefonoResource
|
||||||
# list_per_page = 15
|
# list_per_page = 15
|
||||||
# paginator = CachingPaginator
|
# paginator = CachingPaginator
|
||||||
|
|
@ -69,7 +91,7 @@ class TelefonoAdmin(ImportExportModelAdmin):
|
||||||
|
|
||||||
|
|
||||||
@admin.register(models.Email)
|
@admin.register(models.Email)
|
||||||
class EmailAdmin(ImportExportModelAdmin):
|
class EmailAdmin(ImportExportModelAdmin, PolymorphicChildModelAdmin):
|
||||||
# resource = resources.EmailResource
|
# resource = resources.EmailResource
|
||||||
# list_per_page = 15
|
# list_per_page = 15
|
||||||
# paginator = CachingPaginator
|
# paginator = CachingPaginator
|
||||||
|
|
@ -77,21 +99,49 @@ class EmailAdmin(ImportExportModelAdmin):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class VoceContattoRubricaInline(StackedPolymorphicInline):
|
||||||
|
class IndirizzoInline(StackedPolymorphicInline.Child):
|
||||||
|
model = models.Indirizzo
|
||||||
|
|
||||||
|
class EmailInline(StackedPolymorphicInline.Child):
|
||||||
|
model = models.Email
|
||||||
|
|
||||||
|
class TelefonoInline(StackedPolymorphicInline.Child):
|
||||||
|
model = models.Telefono
|
||||||
|
|
||||||
|
class FaxInline(StackedPolymorphicInline.Child):
|
||||||
|
model = models.Fax
|
||||||
|
|
||||||
|
model = models.VoceContattoRubrica
|
||||||
|
child_inlines = (
|
||||||
|
IndirizzoInline,
|
||||||
|
EmailInline,
|
||||||
|
TelefonoInline,
|
||||||
|
FaxInline,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@admin.register(models.PersonaFisica)
|
@admin.register(models.PersonaFisica)
|
||||||
class PersonaFisicaAdmin(ImportExportModelAdmin):
|
class PersonaFisicaAdmin(PolymorphicInlineSupportMixin, PolymorphicChildModelAdmin):
|
||||||
# resource = resources.PersonaFisicaResource
|
# resource = resources.PersonaFisicaResource
|
||||||
# list_per_page = 15
|
# list_per_page = 15
|
||||||
# paginator = CachingPaginator
|
# paginator = CachingPaginator
|
||||||
# show_full_result_count = False
|
# show_full_result_count = False
|
||||||
|
show_in_index = False
|
||||||
|
get_model_perms = lambda self, req: {}
|
||||||
|
inlines = (VoceContattoRubricaInline,)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@admin.register(models.PersonaGiuridica)
|
@admin.register(models.PersonaGiuridica)
|
||||||
class PersonaGiuridicaAdmin(ImportExportModelAdmin):
|
class PersonaGiuridicaAdmin(PolymorphicInlineSupportMixin, PolymorphicChildModelAdmin):
|
||||||
# resource = resources.PersonaGiuridicaResource
|
# resource = resources.PersonaGiuridicaResource
|
||||||
# list_per_page = 15
|
# list_per_page = 15
|
||||||
# paginator = CachingPaginator
|
# paginator = CachingPaginator
|
||||||
# show_full_result_count = False
|
# show_full_result_count = False
|
||||||
|
show_in_index = False
|
||||||
|
get_model_perms = lambda self, req: {}
|
||||||
|
inlines = (VoceContattoRubricaInline,)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -105,7 +155,7 @@ class SedeAdmin(ImportExportModelAdmin):
|
||||||
|
|
||||||
|
|
||||||
@admin.register(models.Fax)
|
@admin.register(models.Fax)
|
||||||
class FaxAdmin(ImportExportModelAdmin):
|
class FaxAdmin(ImportExportModelAdmin, PolymorphicChildModelAdmin):
|
||||||
# resource = resources.FaxResource
|
# resource = resources.FaxResource
|
||||||
# list_per_page = 15
|
# list_per_page = 15
|
||||||
# paginator = CachingPaginator
|
# paginator = CachingPaginator
|
||||||
|
|
@ -123,20 +173,64 @@ class PecAdmin(ImportExportModelAdmin):
|
||||||
|
|
||||||
|
|
||||||
@admin.register(models.SoggettoContattabile)
|
@admin.register(models.SoggettoContattabile)
|
||||||
class SoggettoContattabileAdmin(ImportExportModelAdmin):
|
class SoggettoContattabileAdmin(PolymorphicParentModelAdmin):
|
||||||
# resource = resources.SoggettoContattabileResource
|
# resource = resources.SoggettoContattabileResource
|
||||||
# list_per_page = 15
|
# list_per_page = 15
|
||||||
# paginator = CachingPaginator
|
# paginator = CachingPaginator
|
||||||
# show_full_result_count = False
|
# show_full_result_count = False
|
||||||
|
child_models = (models.PersonaFisica, models.PersonaGiuridica,)
|
||||||
|
list_filter = (PolymorphicChildModelFilter,)
|
||||||
|
readonly_fields = ('descrizione','tipo',)
|
||||||
|
list_display = ('descrizione','tipo',)
|
||||||
|
search_fields = ('personafisica__nome','personafisica__cognome','personagiuridica__denominazione',)
|
||||||
|
|
||||||
|
def descrizione(self,obj):
|
||||||
|
return str(getattr(obj,obj.polymorphic_ctype.model))
|
||||||
|
|
||||||
|
def tipo(self, obj):
|
||||||
|
return getattr(obj,obj.polymorphic_ctype.model)._meta.verbose_name.title()
|
||||||
|
|
||||||
|
def get_queryset(self, request):
|
||||||
|
qs=super().get_queryset(request).prefetch_related('polymorphic_ctype')
|
||||||
|
return qs
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@admin.register(models.Indirizzo)
|
@admin.register(models.Indirizzo)
|
||||||
class IndirizzoAdmin(ImportExportModelAdmin):
|
class IndirizzoAdmin(ImportExportModelAdmin, RicercaOrdinataMixin, AjaxAutocompleteListFilterModelAdmin, PolymorphicChildModelAdmin):
|
||||||
# resource = resources.IndirizzoResource
|
# resource = resources.IndirizzoResource
|
||||||
# list_per_page = 15
|
# list_per_page = 15
|
||||||
# paginator = CachingPaginator
|
# paginator = CachingPaginator
|
||||||
# show_full_result_count = False
|
# show_full_result_count = False
|
||||||
|
list_per_page = 15
|
||||||
|
paginator = CachingPaginator
|
||||||
|
show_full_result_count = False
|
||||||
|
fields=('soggetto','dug','duf','civico','cap','comune','altro',)
|
||||||
|
search_fields = ('soggetto','indirizzo','cap_id__exact',)
|
||||||
|
autocomplete_fields = ('soggetto','dug','cap','comune',)
|
||||||
|
list_display = ('soggetto','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',)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,9 @@ class SoggettoContattabile(PolymorphicModel):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = 'soggetto contattabile'
|
verbose_name = 'soggetto contattabile'
|
||||||
verbose_name_plural = 'soggetti contattabili'
|
verbose_name_plural = 'soggetti contattabili'
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return str(getattr(self,self.polymorphic_ctype.model))
|
||||||
|
|
||||||
|
|
||||||
class VoceContattoRubrica(PolymorphicModel):
|
class VoceContattoRubrica(PolymorphicModel):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue