Table des matières

L'interface d'administration de Django

Activer l'interface d'administration

L'interface d'administration n'est pas active par défaut.

  1. décommenter django.contrib.admin dans INSTALLED_APPS de settings.py
  2. décommenter les lignes d'admin de urls.py
from django.contrib import admin
admin.autodiscover()
url(r'^admin/', include(admin.site.urls)),

Ajouter une application

Ajouter une application à l'interface d'administration. Permet de dire à l'interface d'administration du projet que nos objets ont une interface d'administration.

from django.contrib import admin
//...
from monApplication.models import monApplication.monObjet

Ajouter un objet

Utiliser soit la méthode décrite ci-dessus soit en déclarant que l'administration d'un objet est réalisée au travers d'un autre objet. Pour un objet Enfant qui a une relation avec Parent

from django.contrib import admin
from polls.models import Enfant, Parent
 
class EnfantInline(admin.StackedInline):
	model = Enfant
	extra = 3
 
class ParentAdmin(admin.ModelAdmin):
    fieldsets = [
        ('Tests', {'fields': ['champ1', 'champ2'], 'classes': ['collapse']}),
    ]
    inlines = [EnfantInline]
 
admin.site.register(Poll, PollAdmin)

Utiliser admin.TabularInline pour un affichage en ligne

Personnaliser l'interface

Personnaliser l'ordre d'apparition des champs

class MonApplicationAdmin(admin.ModelAdmin):
	fields = ['maVariable2', 'maVariable1']
admin.site.register(MonApplication, MonApplicationAdmin)

Personnaliser l'intitulé des champs

S'appuie sur le verbose name.

Pour les champs de type ForeignKey, ManyToManyField et OneToOneField, le verbose name doit être explicitement déclaré, le premier argument étant réservé au nom de la classe en relation.

Organiser les champs dans des groupes

class MonApplicationAdmin(admin.ModelAdmin):
    fieldsets = [
        ('NomGroupe 1', {'fields': ['maVariable1', 'maVariable3']}),
        ('NomGroupe 1 2', {'fields': ['maVariable2']}),
    ]

Ajouter une classe personnalisée à un groupe de champs

class MonApplicationAdmin(admin.ModelAdmin):
    fieldsets = [
        ('NomGroupe 1', {'fields': ['maVariable1', 'maVariable3'], 'classes': ['collapse']}),
        ('NomGroupe 1 2', {'fields': ['maVariable2']}),
    ]

collapse est une classe livrée avec Django qui permet de réduire ou étendre un groupe de données.

Personnaliser l'affichage d'un objet

class MonApplicationAdmin(admin.ModelAdmin):
    fieldsets = [
        ('NomGroupe 1', {'fields': ['maVariable1', 'maVariable3'], 'classes': ['collapse']}),
        ('NomGroupe 1 2', {'fields': ['maVariable2']}),
    ]
    list_display = ('maVariable1', 'maVariable2', 'maVariable3')

Les méthodes de la classe peuvent également être utilisée. Dans ce cas, le tri sur la colonne correspondante n'est pas possible. Exemple avec une méthode vraiOuFaux() :

class MonApplicationAdmin(admin.ModelAdmin):
    fieldsets = [
        ('NomGroupe 1', {'fields': ['maVariable1', 'maVariable3'], 'classes': ['collapse']}),
        ('NomGroupe 1 2', {'fields': ['maVariable2']}),
    ]
    list_display = ('maVariable1', 'maVariable2', 'maVariable3', 'vraiOuFaux')

Voir également comment personnaliser l'affichage d'une méthode

Ajouter une boite de filtrage

list_filter = ['monChampDeFiltrage1','monChampDeFiltrage2']

Ajouter un champ de recherche

search_fields = ['monChamp1', 'monChamp2']

Utilise sql LIKE. La raison est donc de mise pour éviter les problèmes de performance.

Ajouter un tri par date

Il faut évidemment disposer d'une variable de type DateTimeField

date_hierarchy = 'maVariableDate'