Utilisation de l’interface d’administration

Indication

L’interface administration de django est une application au même titre que celle que vous êtes en train de créer

Créons d’abord un compte d’administrateur avec un mot de passe qui nous permettra de rentrer dans le mode administrateur. Pour cela utilisons la commande :

python manage.py createsuperuser
  • Il vous sera demandé un nom de login une adresse electronique et un mot de passe qu’il faudra confirmer.

  • vérifiez que django.contrib.admin est présent dans la partie INSTALLED_APPS de settings.py et vérifier que la ligne

from django.contrib import admin

est présente dans GestionTaches/urls.py et que urlpatterns contient bien :

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

Vous pouvez maintenant avec l’URL localhost:8000/admin accéder à l’administration de la base de données.

Avertissement

Prennez garde, que la suppression de la base de données entrainera la suppression du compte admin créé.

Ajout du modèle de tâches à l’admin

Pour ajouter le modele Task à l’administration il faut modifier le fichier admin.py de l’application de la manière suivante :

from django.contrib import admin
from lesTaches.models import Task
admin.site.register(Task)

Complétez ensuite le modèle de la classe Task si nécéssaire. Que faut-il faire pour que django prenne en compte nos modifications ? (migrations, …)

L’ennui est que les taches ne présentent que leur nom dans l’admin. On souhaiterait voir figurer également la due_date et la schedule_date. Pour ce faire, on modifie le fichier admin.py en lui ajoutant une classe héritant de admin.modelAdmin

from django.contrib import admin
from lesTaches.models import Task

class TaskAdmin(admin.ModelAdmin):
    class TaskAdmin(admin.ModelAdmin):
        list_display=('name','description','closed')
        read_only=('created_date')

admin.site.register(Task,TaskAdmin)

Ajout des champs due_date et schedule_date au modèle

On édite models.py pour celà avec éventuellement en paramètre l’indication null=True pour avoir en toutes circonstances des valeurs par défaut pour certains champs.

et on refait :

python manage.py makemigrations
python manage.py migrate

Testez !

Le modèle doit maintenant être :

from django.db import models

from datetime import datetime, timedelta, date

from django.utils.html import format_html

class Task(models.Model):
    name = models.CharField(max_length=250)
    description = models.TextField()
    created_date = models.DateField(auto_now_add=True)
    closed = models.BooleanField(default=False)
    due_date = models.DateField(null=True)
    schedule_date = models.DateField(default=datetime.now()+timedelta(days=7))

Personnalisation de l’affichage dans l’admin

Modifier l’affichage du champ due_date en fonction de la date du jour :

  • vert si la tache est à réaliser dans plus d’une semaine

  • orange si la tache est à réaliser dans la semaine e

  • rouge sinon

Pour cela, on ajoute la méthode suivante dans la class Task :

def colored_due_date(self):
        due_date = django_date(self.due_date,"d F Y")
        if self.due_date is None or self.due_date-timedelta(days=7) > date.today():
                color = "green"
        elif self.due_date < date.today():
                color = "red"
        else:
                color = "orange"
return format_html("<span style=color:%s>%s</span>" % (color, due_date))


colored_due_date.allow_tags = True

Ajoutez ensuite l’affichage de colored_due_date dans l’interface admin et vérifiez la coloration syntaxique des dates selon le délai restant (ou dépassé !) : Pour cela, dans admin.py :

class TaskAdmin(admin.ModelAdmin):
        list_display = ('name', 'description', 'created_date', 'colored_due_date')

admin.site.register(Task, TaskAdmin)