About Management Commands Accepting Multi-valued Options

Django management commands can accept multi-valued options like this:

python manage.py run_steps --steps=2 --steps=3

Here's how you can define that in the management command:

from django.core.management.base import BaseCommand

class Command(BaseCommand):
    SILENT, NORMAL, VERBOSE = 0, 1, 2

    def add_arguments(self, parser):
        parser.add_argument(
            "--steps",
            action="append",
            help="Steps to execute (omit for all)",
            choices=["step1", "step2", "step3"],
        )

    def handle(self, *args, **options):
        self.verbosity = options.get("verbosity", self.NORMAL)
        self.steps = options.get("steps") or ["step1", "step2", "step3"]

        if "step1" in self.steps:
            ...
        if "step2" in self.steps:
            ...
        if "step3" in self.steps:
            ...

Tips and Tricks Programming Dev Ops Django 4.2 Django 3.2 Django 2.2 Python 3