Как настроить команду shell

Django shell - это интерактивная среда Python, которая предоставляет доступ к моделям и настройкам, что делает ее полезной для тестирования кода, экспериментов с запросами и взаимодействия с данными приложения.

Настройка команды shell позволяет добавить дополнительные функциональные возможности или предварительно загрузить определенные модули. Для этого создайте новую команду управления, которая является подклассом django.core.management.commands.shell.Command и переопределяет существующую команду управления shell. Для получения более подробной информации обратитесь к руководству по overriding commands.

Настройка автоматического импорта

New in Django 5.2.

Чтобы настроить режим автоматического импорта для команды управления shell, переопределите метод get_auto_imports(). Этот метод должен возвращать последовательность путей импорта для объектов или модулей, доступных в приложении. Например:

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",
        ]

Приведенная выше настройка добавляет resolve() и reverse() в пространство имен по умолчанию, которое уже включает все модели из приложений, перечисленных в INSTALLED_APPS. Эти объекты будут доступны в shell без необходимости ручного импорта.

Выполнение этой настроенной команды shell с помощью verbosity=2 покажет:

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

Если переопределенная команда shell содержит пути, которые невозможно импортировать, эти ошибки отображаются, если для параметра verbosity установлено значение 1 или выше. Повторяющийся импорт обрабатывается автоматически.

Обратите внимание, что автоматический импорт может быть отключен для определенного сеанса shell с помощью флага --no-imports. Чтобы навсегда отключить автоматический импорт, замените get_auto_imports() на None:

class Command(shell.Command):
    def get_auto_imports(self):
        return None
Вернуться на верх