Собственная management-команда - это Python-класс, который запускается как python manage.py <имя>. Это стандартный способ держать обслуживающие задачи, импорты и отчёты рядом с кодом Django.
Почему команда, а не скрипт
Отдельному скрипту нужно задать DJANGO_SETTINGS_MODULE и вызвать django.setup(), прежде чем он коснётся моделей. Команда стартует внутри настроенного проекта и сразу даёт разбор аргументов, --help, коды выхода и удобное тестирование.
Устройство и расположение
Создайте management/commands/ внутри любого приложения из INSTALLED_APPS; в обеих папках нужен __init__.py. Имя файла - имя команды.
blog/
management/
__init__.py
commands/
__init__.py
greet.py # python manage.py greet# 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.