15
septembre 10Django - l'interface d'administration
Dans les articles précédents, nous avons conçu la structure d'un futur portfolio Django et en avons développé les modèles. Maintenant, nous allons lancer l'interface d'administration générique proposée par Django afin d'avoir la possibilité d'ajouter des données à notre application.
Cette dernière nous permettra d'ajouter / éditer / supprimer (CRUD) tous les objets que nous aurons décidé de rendre personnalisable.
Activer l'interface d'administration
Avant toute chose, il faut activer l'interface d'administration. Pour cela, dans votre fichier urls.py (celui de la racine, correspondant à votre projet), décommentez les deux lignes pour avoir un résultat de la forme suivante :
from django.conf.urls.defaults import *
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Example:
# (r'^mysite/', include('mysite.foo.urls')),
# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
# to INSTALLED_APPS to enable admin documentation:
# (r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
(r'^admin/', include(admin.site.urls)),
)
Puis, dans settings.py, ajoutez l'interface d'administration dans les applications installées (si ce n'est pas déjà le cas) :
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.admin',
'website.apps.portfolio',
)
Vous devez maintenant synchroniser la base de données pour ajouter les tables correspondant à l'admin :
$ manage.py syncdb
Relancez votre serveur de développement
$ manage.py runserver
et rendez-vous sur
http://localhost:8000/admin/
Bienvenue sur l'interface d'administration de Django !
Personnaliser l'interface
Vous pouvez maintenant personnaliser les informations (ou plutôt les modèles) que vous voudrez modifier grâce à cette interface. Typiquement, pour notre portfolio, il s'agit :
- Des créations.
- De leurs images respectives.
- Des tags qui les définissent.
Vous allez donc éditer le fichier admin.py de votre application (apps/portfolio/admin.py) et définir une classe pour l'administration des créations, que vous allez relier au modèle Crea :
from django.contrib import admin
from website.apps.portfolio.models import Crea, Tag, Pict
class CreaAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'creation_date', 'link')
search_field = ('title', 'description')
date_hierarchy = 'creation_date'
prepopulated_fields = {'slug': ('title',)}
admin.site.register(Crea, CreaAdmin)
Si vous retournez sur la page de l'interface, vous verrez que vous pouvez maintenant ajouter et modifier vos objets Crea. Nous allons maintenant faire de même avec les images et les tags. Seulement, vu qu'il s'agit-là d'objets liés entre eux (une ForeignKey), nous allons les ajouter directement à la gestion des créations. Ainsi, quand vous voudrez ajouter une création, vous pourrez gérer ses images et ses tags sur la même page. Pour cela, nous alons utiliser très simplement TabularInline :
class PictInline(admin.TabularInline):
model = Pict
class TagInline(admin.TabularInline):
model = Crea.tags.through
Ici, on mappe directement la classe d'administration avec le modèle. Concernant les tags, on utilise le mot clé through pour récupérer la relation en elle-même (il s'agit d'une ManyToMany). Vous n'aurez plus qu'à ajouter ces classes Tabular à la classe CreaAdmin :
class CreaAdmin(admin.ModelAdmin):
[...]
inlines = [PictInline, TaskInline]
Désormais, dans l'interface d'administration, vous pourrez gérer vos créations, les images et les tags sur la même page !
Dans le prochain article, nous aborderons le côté front et nous concentrerons sur les vues. Révisez votre MVC !

