Mis a jour le 2025-04-14, 12:10

Interface administration

Pour créer un utilisateur qui pourra accéder au site d'administration : manage.py createsuperuser (permet la création en interactif).
Interface d'administration :
  • par défaut, son adresse est : http://localhost:8000/admin (sinon, adapter le port s'il a été changé).
  • pour qu'une classe MyModel d'une application myApp soit visible dans l'interface d'administration, il faut la rajouter dans le fichier admin.py de myApp : from .models import MyModel; admin.site.register(MyModel).
Adaptations de l'interface :
  • on peut changer l'ordre des champs dans l'interface d'administration en définissant une nouvelle classe dans admin.py :
    class MyNewModel(admin.ModelAdmin):
        fields = ['field2', 'field1', 'field3']
    admin.site.register(MyModel, MyNewModel)
        
    (on suppose ici que les champs de MyModel s'appelaient field1, field2, field3.
  • on peut grouper les champs en sets, avec certains sets collapsés par défaut, car rarement utilisés :
    class MyNewModel(admin.ModelAdmin):
        fieldsets = [(None, {'fields': ['field1', 'field2']}),
                     ('champs optionnels', {'fields': ['field3', 'field4'], 'classes': ['collapse']})]
    admin.site.register(MyModel, MyNewModel)
        
  • on peut rajouter à une classe mère la possibilité de rajouter des objets de la classe fille (i.e. ayant une clef étrangère vers la mère) directement dans le formulaire :
    class ChoiceInline(admin.StackedInline):
        model = ClasseFille
        extra = 3 # nombre de sous-formulaires par défaut
    
    class ClassMereNew(admin.ModelAdmin):
        inlines = [ChoiceInline]
    
    admin.site.register(ClasseMere, ClasseMereNew)
        
    utiliser admin.TabularInline à la place de admin.StackedInline si on veut une préentation sous la forme tableau pour les champs de classe fille.
  • on peut afficher la liste des objets avec certains de leurs champs plutôt que le nom issu de __str__ par :
    class MyNewModel(admin.ModelAdmin):
        list_display = ('field1', 'field2')
        
  • on peut ainsi afficher aussi un champ qui est le résultat d'un calcul en mettant dans list_display le nom de la méthode.
  • on peut rajouter l'affichage d'un filtre dans la vue liste :
    class MyNewModel(admin.ModelAdmin):
        list_filter = ['field1']
        
  • on peut rajouter un champ de recherche sur certaines colonnes (fait un like) :
    class MyNewModel(admin.ModelAdmin):
        search_fields = ['field1', 'field2']
        

Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert