Outils pour utilisateurs

Outils du site


django:interface_admin

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.

  • Dans monApplication/admin.py, ajouter
from django.contrib import admin
//...
from monApplication.models import monApplication.monObjet
  • redémarrer le serveur : les modifications sont prises en compte automatiquement sans nécessiter de redémarrage mais pas les créations.

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

  • Dans admin.py de l'application, créer une nouvelle classe qui définit l'ordre d'apparition des champs
class MonApplicationAdmin(admin.ModelAdmin):
	fields = ['maVariable2', 'maVariable1']
  • Passer cette classe comme second argument de la méthode d'enregistrement
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

  • Dans la classe MonApplicationAdmin, ajouter les 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'
django/interface_admin.txt · Dernière modification: 2016/10/17 13:56 (modification externe)