Admin di django (1)

Admin di django
Tempo di lettura: 5 minuti

L’Admin di Django  è uno strumento flessibile, potente e sicuro.

Amo questo framework. La prima volta mi avvicinai avevo un po’ di diffidenza, non conoscevo Python e venivo da un contesto completamente diverso. Subito sentii un alito di novità e di interesse. Oggi, a distanza di 5 anni, da quei primi passi, sono sempre più affascinato, ogni piccola sorpresa continua ad incuriosirmi. Troppo spesso sono convinto di essere in buona compagnia .

Per questo motivo ho deciso di scrivere degli articoli di dettaglio sull’Admin, in particolare. Faccio leva sulla documentazione ufficiale e sulle mie esperienze professionali.

Quando crei un nuovo progetto Django crei anche l’Admin. L’Admin è attivata di default all’URL /admin/ e, ti permette, gestire i dati delle applicazioni del progetto.

Ricorda che Django ha bisogno di un progetto - PROJECT - che ospita diverse applicazioni - APPS.

Questo articolo entra direttamente nel dettaglio dell’admin di Django  il framework per lo sviluppo Web, scritto in Python.

Consiglio la lettura di questo articolo solo a chi ha già un’infarinatura del framework. In questo articolo troverai delle note di carattere tecnico. Puoi consultarlo come REFERENCE.

Se hai bisogno di avere informazioni introduttive su Django  ti consiglio di leggere questi articoli:

Sommario

  1. Admin di Django;
  2. Logica dei modelli;
  3. Accesso all’Admin di Django;
  4. Oggetti di tipo_ModelAdmin;
  5. Il decoratore Register;
  6. Alla scoperta dei file dell’Admin;
  7. ModelAdmin options;
  8. ModelAdmin.actions;
  9. ModelAdmin.actions_selection_counter;
  10. ModelAdmin.date_hierarchy;
  11. ModelAdmin.empty_value_display;

L’Admin di Django

L’Admin  è uno strumento potente e flessibile capace di adattarsi a diverse esigenze. Le personalizzazioni vengono fatte attraverso l’utilizzo degli hooks che sono discussi in tutti i particolari nella documentazione ufficiale del progetto.

Sommario ⇑

L’Admin di Django segue la logica dei modelli

L’Admin è generata automaticamente e questa è una grande comodità, per gli sviluppatori che hanno a disposizione una base di partenza per esplorare il progetto, suddiviso in applicazioni e modelli.

Ti dico subito, però, che l’admin di Django è centrata sulla logica espressa nei modelli – models. Se la tua  l’applicazione necessita di viste – views – che richiamano dati da più applicazioni, ti consiglio di realizzare un’amministrazione diversa dall’Admin di Django, pienamente personalizzata a tuo piacimento. In questo modo terrai l’admin per l’esplorazione dei dati grezzi e sarai libero di ottimizzare le viste come vuoi.

Sommario ⇑

Accesso all’Admin di Django

Per accedere all’Admin di Django è necessario creare un superuser. Di default l’accesso all’admin di Django è dato a quegli utenti che fanno parte dello staff – l’attributo is_staff è True.

Solo le applicazioni registrate nel settings del progetto sono presenti nell’Admin di Django.

Sommario ⇑

Oggetti di tipo ModelAdmin

 class ModelAdmin

La classe ModelAdmin è la rappresentazione di un modello nell’interfaccia admin. Generalmente, gli oggetto di tipo ModelAdmin sono nel file admin.py della tua applicazione. Un tipico esempio del ModelAdmin è questo:


from django.contrib import admin
from myproject.myapp.models import Author

class AuthorAdmin(admin.ModelAdmin):
   pass
admin.site.register(Author, AuthorAdmin)

In questo esempio non è stata passata alcuna informazione all’oggetto AuthorAdmin, osserva il comando pass. Sarebbe bastato scrivere semplicemente:


from django.contrib import admin
from myproject.myapp.models import Author

admin.site.register(Author, AuthorAdmin)

Sommario ⇑

Il decoratore Register


register(*models, site=django.contrib.admin.sites.site)

Per inizializzare il tuo ModelAdmin esiste anche un altro modo, utilizzare il decoratore register.

È utile quando vuoi inizializzare – registrare –  più oggetti di tipo ModelAdmin. Se stai usando una classe personalizzata di ModelAdmin lo puoi dichiarare passandolo come argomento al decoratore.

from django.contrib import admin
from .models import Author, Editor, Reader
from myproject.admin_site import custom_admin_site

@admin.register(Author, Reader, Editor, site=custom_admin_site)
class PersonAdmin(admin.ModelAdmin):
    pass

RICORDA che non puoi utilizzare il decoratore se hai bisogno di referenziare la tua classe model admin nel suo metodo __init__, per esempio super(PersonAdmin, self).__init__(*args, **kwargs). Puoi usare super().__init__(*args, **kwargs).

Sommario ⇑

Alla scoperta dei file dell’Admin

Quando inserisci ‘django.contrib.admin’ nella lista INSTALLED_APPS del tuo file settings, Django automaticamente cerca un modulo admin per ogni applicazione e importa la sua configurazione.

class apps.AdminConfig

Questa è la classe di default per la configurazione dell’Admin di Django: AppConfig. Esegue il metodo autodiscover() quando django parte.

class apps.SimpleAdminConfig

Questa classe è simile ad AdminConfig, ma non esegue il metodo autodiscover().

default_site

Esprime un percorso separato da punti, di default per l’Admin di Django, e ritorna una istanza del sito Web.

Per esempio è comodo per riscrivere l’attributo django.contrib.admin.site  all’interno della classe AppConfig, il valore di default è ‘django.contrib.admin.sites.AdminSite’. Per approfondire leggi qui.

autodiscover()

Questa funzione prova ad importare un modulo di admin – admin.py – per ogni applicazione installata – caricata nella lista INSTALLED_APPS del file settings.py.

Questi moduli sono necessari per il caricamento dell’intera Admin.

Di solito non è necessario eseguire questa funzione direttamente nel codice, in quanto come detto sopra, viene eseguita dalla classe AdminConfig quando Django parte.

Se stai usando un AdminSite personalizzato è un uso comune importare tutte le sotto classi ModelAdmin nel tuo codice e registrarle nell’AdminSite personalizzato. In questo caso, per disabilitare l’auto-discover, dovresti mettere ‘django.contrib.admin.apps.SimpleAdminConfig’ al posto di ‘django.contrib.admin’ nell’INSTALLED_APPS del setting.py.

Sommario ⇑

Le variabili della classe ModelAdmin – ModelAdmin options

La classe ModelAdmin è molto flessibile. Ha molte variabili che permettono la personalizzazione dell’interfaccia.

Tutte queste variabili sono definite nella sotto classe ModelAdmin.

from django.contrib import admin

class AuthorAdmin(admin.ModelAdmin):
    date_hierarchy = 'pub_date'

Un tipico esempio è impostare un campo, in questo caso pub_date come filtro temporale nella lista degli oggetti.

Sommario ⇑

ModelAdmin.actions

Una lista di azioni – actions – da rendere disponibili sulla pagina della lista. Per approfondire vedi la pagina della guida, dedicata alle actions.

ModelAdmin.actions_on_top
ModelAdmin.actions_on_bottom

Controlla la posizione dove apparirà il selectbox delle azioni. Di default le actions vengono mostrate nella lista degli oggetti, in alto (actions_on_top = True; actions_on_bottom = False).

Sommario ⇑

ModelAdmin.actions_selection_counter

Controlla la visualizzazione di un contatore degli elementi della lista, selezionati, subito dopo il menù a tendina delle actions. Di default è impostato a True, quindi nella lista appare  (actions_selection_counter = True).

Sommario ⇑

ModelAdmin.date_hierarchy

Imposta il filtro date_hierarchy al nome del campo, di tipo data o di tipo data ora, nel tuo modello, e cambia le righe mostrate nella lista in base al criterio di navigazione impostato da questo filtro.

Esempio:

date_hierarchy = 'pub_date'

È possibile anche specificare un campo relazionato, nel modello, usando il marcatore __ – doppio underscore – per esempio:

date_hierarchy = 'author__pub_date'

Questo popolerà la lista in modo intelligente in base ai dati disponibili, ad es. se tutte le date sono in un mese, verrà visualizzato solo il dettaglio a livello del mese, giorno per giorno.

Nota

date_hierarchy usa QuerySet.datetimes() internamente. Fai riferimento alla sua documentazione per eventuali avvertenze quando è attivo il Time Zone (USE_TZ = True).

Sommario ⇑

ModelAdmin.empty_value_display

Questo attributo sovrascrive il valore di default del campo quando questo è vuoto (None, empty string, etc.). Il valore di default è – (un trattino). Per esempio:

from django.contrib import admin

class AuthorAdmin(admin.ModelAdmin):
    empty_value_display = '-empty-'

Puoi sovrascrivere il valore vuoto – empty_value – per tutte le pagine di admin con AdminSite.empty_value_display, o per specifici campi, in questo modo:

from django.contrib import admin

class AuthorAdmin(admin.ModelAdmin):
    fields = ('name', 'title', 'view_birth_date')

    @admin.display(empty_value='???')
    def view_birth_date(self, obj):
        return obj.birth_date
NOVITÀ in Django 3.2:
L'argomento empty_value per il metodo display() è equivalente al settare l'attributo empty_value_display sulla funzione display direttamente come nelle precedenti versioni. Questo tipo di configurazione è ancora supportato per assicurare la compatibilità con le precedenti versioni.

Sommario ⇑


È disponibile un altro articolo su questo argomento:
L'Admin di Django (2) - francescodattolo.it
Fonte di riferimento: https://docs.djangoproject.com/en/dev/ref/contrib/admin/ L'Admin di Django (1) - francescodattolo.it

Lascia un commento sei sei interessato a questa guida di dettaglio, sarò più motivato a continuare nella redazione di questi articoli su Django il framework per i perfezionisti con una scadenza vicina.

Un commento su “Admin di django (1)”

Rispondi

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.