Le site d’administration

Documentation

L'administration est configurée automatiquement quand on utilise la commande django-admin startproject monsupersite pour démarrer un projet Django.

Dans le fichier monsupersite/urls.py, on trouve la route pour accéder à la partie administation

...
urlpatterns = [
    path('admin/', admin.site.urls),
    ...

Si on se rend à l'adresse 127.0.0.1:8000/admin, on doit s'identifier…

Création du super-utilisateur

$ python manage.py createsuperuser

et répondre aux questions…

Vous pouvez maintenant vous connecter avec les identifiants que vous venez de choisir

  • Par défaut, il est possible de créer, supprimer ou modifier des utilisateurs et des groupes.
  • Une gestion des permissions est également proposée afin d'autoriser certains utilisateurs à faire certaines actions.
  • Il est possible de définir des groupes afin de configurer les permissions pour un ensemble d'utilisateur.

Ajout des modèles dans l'administration

Afin d'utiliser les modèles de nos applications, il faut les déclarer dans le fichier admin.py de chaque application.

Exemple pour ajouter les modèles Category et Article.

from django.contrib import admin

# Register your models here.
from .models import Category, Article

admin.site.register(Category)
admin.site.register(Article)

Contrôle de l'affichage des champs

Définir list_display pour contrôler quels champs sont affichés sur la page de liste pour modification de l’interface d’administration.

Exemple pour afficher le titre et la description d'une catégorie

...
class CategoryAdmin(admin.ModelAdmin):
  list_display = ('title', 'description') 
  
admin.site.register(Category, CategoryAdmin)
...

Si list_display n'est pas défini, le site affichera une seule colonne avec la représentation __str__() de chaque objet.

Cette méthode peut être défini dans les modèles.

Exemple fichier models.py :

...
class Category(models.Model):
  title = models.CharField(max_length=255)
  description = models.TextField(blank=True)

  def __str__(self):
        return '%s => %s' % (self.title, self.description)

Il est également possible d'utiliser __str__ dans list_display

...
class CategoryAdmin(admin.ModelAdmin):
  list_display = ('__str__', 'description')
...