Admin di django (2)

Admin di django
Tempo di lettura: 3 minuti

Questo articolo è la seconda parte dell’articolo

Admin di django (1)

Questi articoli approfondiscono concetti chiave dell’utilizzo dell’admin di Django il framework per lo sviluppo di applicazioni Web, scritto in Python.

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

Sommario

  1. ModelAdmin.exclude;
  2. ModelAdmin.fields;
  3. ModelAdmin.fieldsets;
ModelAdmin.exclude

Questo attributo, se caricato, deve essere una lista di fields da escludere dal modulo – Form.

Per esempio consideriamo il seguente model:

from django.db import models

class Author(models.Model):
  name = models.CharField(max_length=100)
  title = models.CharField(max_length=3)
  birth_date = models.DateField(blank=True, null=True)

Se vuoi un modulo per la classe Author che includa solo i campi name e title, dovresti specificare quali mostrare o escluderli come segue:


from django.contrib import admin

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

class AuthorAdmin(admin.ModelAdmin):
    exclude = ('birth_date',)

Dato che il model Author ha solo tre campi, name, title, e birth_date, il modulo risultante dalle dichiarazioni di cui sopra ha esattamente gli stessi campi.

Sommario ⇑

ModelAdmin.fields

Usa l’opzione fields per fare semplicemente dei cambi di layout al modulo sulle pagine di aggiunta o di modifica, come mostrare solo un sottoinsieme di campi, modificarne l’ordine, o raggrupparli dentro righe.  Per esempio potresti ridefinire una versione semplificata del modulo di admin per django.contrib.flatpages.models.FlatPage come segue:

class FlatPageAdmin(admin.ModelAdmin):
    fields = ('url', 'title', 'content')

In questo modo solo i campi, url, title e content saranno mostrati in sequenza nel form. fields può contenere valori definiti in ModelAdmin.readonly_fields per essere mostrati come campi di sola lettura.

Per raggruppamenti più complessi occorre utilizzare l’opzione fieldsets.

L’opzione fields accetta gli stessi tipi di valori come list_display, tranne per il fatto che i callables -campi ottenuti dinamicamente dall’utilizzo di una funzione – non sono accettati. Questi tipi di campi potranno essere utilizzati solo se sono listati in readonly_fields.

Per mostrare più campi sulla stessa linea, raggruppa quei campi nella loro tupla. Nell’esempio che segue i campi url e title sono posizionati sulla prima riga e su quella sotto il campo content.


class FlatPageAdmin(admin.ModelAdmin):
    fields = (('url', 'title'), 'content')

Nota

Questa opzione di fields non deve essere confusa il dizionario fields che si trova all'interno dell'opzione dei fieldsets, come descritto nella sezione successiva.

Se non è presente né l’opzione fields, né l’opzione fieldsets, allora Django mostrerà ogni singolo campo che non è un AutoField e non ha editable=True, in un singolo fieldset, nello stesso ordine che i campi sono definiti nel modello.

Admin di Django, Fields

Sommario ⇑

ModelAdmin.fieldsets

Imposta l’opzione fieldsets per controllare il layout della pagina per aggiungere – add – o modificare – edit.

fieldsets è una lista di due tuple, ogni singola coppia di tuple rappresenta un <fieldset> sulla pagina di amministrazione. (Un <fieldset> è una ‘sezione‘ del modulo – form.)

La coppia di tuple è nel formato (nome – name, opzioni del campo – field_options), dove ‘nome’ è la string che rappresenta il titolo del fieldset e ‘opzioni del campo‘ è un dizionario di informazioni sul fieldset, incluso la lista di campi che vengono visualizzati.

Di seguito un esempio completo preso dal modello django.contrib.flatpages.models.FlatPage:

from django.contrib import admin

class FlatPageAdmin(admin.ModelAdmin):
    fieldsets = (
        (None, {
            'fields': ('url', 'title', 'content', 'sites')
        }),
        ('Advanced options', {
            'classes': ('collapse',),
            'fields': ('registration_required', 'template_name'),
        }),
    )

Il field_options può avere le seguenti chiavi – keys:

  • fields;
  • classes;
  • descriptions;
fields

Una tupla di nomi da mostrare in questo fieldset. Questa chiave è necessaria.

Esempio:

{
'fields': ('first_name', 'last_name', 'address', 'city', 'state'),
}

Come per l’opzione fields, per mostrare più campi sulla stessa riga, occorre racchiuderli nella stessa tupla. Nell’esempio che segue first_name e last_name sono mostrati sulla stessa riga:

 

{
'fields': (('first_name', 'last_name'), 'address', 'city', 'state'),
}

fields può contenere valori definiti come readonly_fields per essere mostrati come campi di sola lettura.

Se aggiungi un campo ottenuto da una chiamata ad una funzione – callables, come per fields, viene applicata la stessa regola: i campi ottenuti dalla chiamata ad una funzione devono essere campi di sola lettura – readonly_fields.

classes

Una lista o tupla contenente classi CSS extra da applicare al fieldset.

Esempio:

{
  'classes': ('wide', 'extrapretty'),
}

Due classi molto utili definite di default nei fogli di stile del sito sono collapse e wide. Fieldsets definiti con collapse saranno inizialmente raggruppati – collapsed – nella pagina dell’admin e sarà aggiunta un bottone con ‘clicca per espandere‘. Fieldsets con wide saranno estesi per tutta la larghezza della pagina.

description

Una stringa di testo opzionale ed extra sarà mostrata sopra ogni fieldset, sotto l’intestazione del fieldset. Questa stringa non è visualizzata nel layout TaularInLine.

Presta attenzione che questo valore non è ripulito dai marcatori HTML –  HTML-escaped – quando è configurato nell’admin. Questo ti permette di utilizzare eventuale codice HTML se necessario per il tuo layout. Diversamente puoi utilizzare il testo semplice con django.utils.html.escape() per ripulire i caratteri speciali dei marcatori HTML.

Sommario ⇑

Fonte di riferimento:
https://docs.djangoproject.com/en/dev/ref/contrib/admin/
L'Admin di Django (2) - francescodattolo.it

Un commento su “Admin di django (2)”

Rispondi

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