shell
command¶The Django shell
is an interactive Python environment that provides
access to models and settings, making it useful for testing code, experimenting
with queries, and interacting with application data.
Customizing the shell
command allows adding extra functionality or
pre-loading specific modules. To do this, create a new management command that
subclasses django.core.management.commands.shell.Command
and overrides the
existing shell
management command. For more details, refer to the guide on
overriding commands.
To customize the automatic import behavior of the shell
management
command, override the get_auto_imports()
method. This method should return
a sequence of import paths for objects or modules available in the application.
For example:
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
. These objects
will be available in the shell
without requiring a manual import.
Running this customized shell
command with verbosity=2
would show:
8 objects imported automatically:
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
If an overridden shell
command includes paths that cannot be imported,
these errors are shown when verbosity
is set to 1
or higher.
Note that automatic imports can be disabled for a specific shell
session
using the --no-imports
flag. To permanently
disable automatic imports, override get_auto_imports()
to return None
:
class Command(shell.Command):
def get_auto_imports(self):
return None
Mar 04, 2025