Premiers pas avec django-admin

Supprimer un modèle des pages d’administration

Django Admin est livré avec certains modèles enregistrés par défaut. Il peut arriver que vous souhaitiez supprimer un modèle des pages d’administration.

Cela se fait dans le sous-module admin. Si votre application a été créée à l’aide de manage.py startapp, le fichier admin.py devrait déjà se trouver dans votre module d’application. Sinon créez-le.

#myapp/admin.py
from django.contrib import admin
from django.contrib.auth.models import User

admin.site.unregister(User)

Configurer Django Admin

Tout ce dont vous avez besoin pour démarrer avec Django admin est déjà configuré dans la disposition de projet par défaut de Django. Ceci comprend:

# settings.py

# `django.contrib.admin` and its dependancies.
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    ...,
]

MIDDLEWARE = [
    ...
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    ...
]

TEMPLATES = [
    {
        ...,
        'OPTIONS': {
            'context_processors': [
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                ...
            ],
        },
    },
]

Faites attention à urls.py qui est légèrement différent dans Django >= 1.9 que dans les anciennes versions.

from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]
from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
]

La version avec include fonctionnera toujours dans Django 1.9 mais est obsolète et sera supprimée à l’avenir.

Si ce n’est déjà fait, vous devez appliquer les migrations de base :

$ python manage.py migrate

Pour accéder à l’admin, il faut aussi créer un superuser avec :

$ python manage.py createsuperuser

Une fois cela fait, vous pouvez exécuter votre serveur :

$ python manage.py runserver

Et visitez la page d’administration à http://127.0.0.1:8000/admin/

## Ajouter un modèle aux pages d’administration

Lorsque vous créez vos propres modèles dans une application, ils doivent toujours être enregistrés pour être disponibles dans les pages d’administration.

Cela se fait dans le sous-module admin. Si votre application a été créée à l’aide de manage.py startapp, un fichier admin.py devrait déjà se trouver dans votre module d’application. Sinon créez-le.

#myapp/admin.py
from django.contrib import admin
from myproject.myapp.models import MyModel

admin.site.register(MyModel)

Toutes les options sont définies sur la sous-classe ModelAdmin. quelques possibilités :

class MyCustomAdmin(admin.ModelAdmin):
    list_display = ('name','age','email')  # fields to display in the listing
    empty_value_display = '-empty-'        # display value when empty 
    list_filter = ('name', 'company')      # enable results filtering
    list_per_page = 25                     # number of items per page 
    ordering = ['-pub_date', 'name']       # Default results ordering

# and register it 
admin.site.register(MyModel, MyCustomAdmin)

Une façon plus concise d’enregistrer un modèle consiste à utiliser le décorateur admin.register :

@admin.register(MyModel)
class MyCustomAdmin(admin.ModelAdmin)
    ...

Personnaliser le modèle d’administrateur utilisateur Django

from django.contrib.auth.models import User    
class UserAdmin(admin.ModelAdmin):
    list_display = ('email', 'first_name', 'last_name')
    list_filter = ('is_staff', 'is_superuser')
    
admin.site.unregister(User) 
admin.site.register(User, UserAdmin)

Nous devons nous désinscrire avant d’enregistrer UserAdmin personnalisé car dans Django User Model Admin déjà enregistré, nous devons donc d’abord désinscrire User Model dans notre admin.py, puis nous pouvons enregistrer User Model avec Custom ModelAdmin