Sorry, this blog is exclusively written in French!

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 !