Comment personnaliser la commande shell¶
Le shell Django est un environnement Python interactif donnant accès aux modèles et aux réglages, ce qui en fait un outil important pour tester du code, expérimenter avec des requêtes ou pour interagir avec les données d’une application.
La personnalisation de la commande shell permet d’ajouter des fonctionnalités supplémentaires ou de précharger des modules spécifiques. Pour cela, créez une nouvelle commande d’administration héritant de django.core.management.commands.shell.Command et surchargez la commande shell existante. Pour plus de détails, référez-vous au guide sur la surcharge des commandes.
Personnalisation des importations automatiques¶
Pour personnaliser le comportement d’importation automatique de la commande d’administration shell, surchargez la méthode get_auto_imports(). Cette méthode doit renvoyer une séquence de chemins d’importation pour des objets et des modules disponibles dans l’application. Par exemple :
polls/management/commands/shell.py¶from django.core.management.commands import shell
class Command(shell.Command):
def get_auto_imports(self):
return super().get_auto_imports() + [
"django.urls.reverse",
"django.urls.resolve",
]
The customization above adds resolve() and
reverse() to the default namespace, which already includes
all models from the apps listed in INSTALLED_APPS plus what is
imported by default. These objects will be available in the shell without
requiring a manual import.
Le lancement de cette commande shell personnalisée avec verbosity=2 va afficher :
13 objects imported automatically:
from django.db import connection, reset_queries, models
from django.conf import settings
from django.contrib.admin.models import LogEntry
from django.contrib.auth.models import Group, Permission, User
from django.contrib.contenttypes.models import ContentType
from django.contrib.sessions.models import Session
from django.urls import resolve, reverse
from django.utils import timezone
Automatic imports of common utilities, such as django.conf.settings,
were added.
Si une commande shell personnalisée inclut des chemins qui ne peuvent pas être importés, ces erreurs sont affichées si verbosity est à 1 ou plus. Les importations à double sont gérées automatiquement.
Notez que les importations automatiques peuvent être désactivées pour une session shell spécifique en utilisant l’option --no-imports. Pour désactiver les importations automatiques de manière permanente, surchargez get_auto_imports() pour qu’elle renvoie None:
class Command(shell.Command):
def get_auto_imports(self):
return None