Hur man anpassar kommandot shell
¶
Django shell
är en interaktiv Python-miljö som ger tillgång till modeller och inställningar, vilket gör den användbar för att testa kod, experimentera med frågor och interagera med applikationsdata.
Genom att anpassa kommandot shell
kan du lägga till extra funktionalitet eller förladda specifika moduler. För att göra detta skapar du ett nytt hanteringskommando som underklassar django.core.management.commands.shell.Command
och åsidosätter det befintliga hanteringskommandot shell
. För mer information, se guiden om Överskriva kommandon.
Anpassa automatisk import¶
Om du vill anpassa beteendet för automatisk import i hanteringskommandot shell
, åsidosätter du metoden get_auto_imports()
. Denna metod bör returnera en sekvens av importsökvägar för objekt eller moduler som är tillgängliga i programmet. Till exempel:
polls/hantering/kommandon/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",
]
Anpassningen ovan lägger till resolve()
och reverse()
till standardnamnrymden, som redan innehåller alla modeller från de appar som listas i INSTALLED_APPS
. Dessa objekt kommer att finnas tillgängliga i shell
utan att kräva en manuell import.
Att köra detta anpassade shell
-kommando med verbosity=2
skulle visa:
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
Om ett åsidosatt shell
-kommando innehåller sökvägar som inte kan importeras visas dessa fel när verbosity
är inställt på 1
eller högre. Duplikatimport hanteras automatiskt.
Observera att automatisk import kan avaktiveras för en specifik shell
-session med hjälp av --no-imports
-flaggan. För att permanent inaktivera automatisk import, åsidosätt get_auto_imports()
så att den returnerar None
:
class Command(shell.Command):
def get_auto_imports(self):
return None