Собственная management-команда - это Python-класс, который запускается как python manage.py <имя>. Это стандартный способ держать обслуживающие задачи, импорты и отчёты рядом с кодом Django.

Почему команда, а не скрипт

Отдельному скрипту нужно задать DJANGO_SETTINGS_MODULE и вызвать django.setup(), прежде чем он коснётся моделей. Команда стартует внутри настроенного проекта и сразу даёт разбор аргументов, --help, коды выхода и удобное тестирование.

Как выполняется команда
Как выполняется команда

Устройство и расположение

Создайте management/commands/ внутри любого приложения из INSTALLED_APPS; в обеих папках нужен __init__.py. Имя файла - имя команды.

text
blog/
  management/
    __init__.py
    commands/
      __init__.py
      greet.py        # python manage.py greet
python
# blog/management/commands/greet.py
from django.core.management.base import BaseCommand

class Command(BaseCommand):
    help = 'Print a greeting'

    def add_arguments(self, parser):
        parser.add_argument('name')
        parser.add_argument('--shout', action='store_true')

    def handle(self, *args, **options):
        text = f"Hello, {options['name']}!"
        if options['shout']:
            text = text.upper()
        self.stdout.write(text)

Запуск python manage.py greet Ada --shout выводит HELLO, ADA!. Команда python manage.py greet --help сама покажет текст help и аргументы.

💡 Файлы, имя которых начинается с подчёркивания, игнорируются, поэтому вспомогательный код кладите в _utils.py.

Аргументы