How does one use Django custom management command option?

peter2108 picture peter2108 · Nov 17, 2010 · Viewed 10.5k times · Source

The Django doc tell me how to add an option to my django custom management command, via an example:

from optparse import make_option

class Command(BaseCommand):
    option_list = BaseCommand.option_list + (
        make_option('--delete',
            action='store_true',
            dest='delete',
            default=False,
            help='Delete poll instead of closing it'),
    )

Then the docs just stop. How would one write the handle method for this class to check whether the user has supplied a --delete option? At times Django makes the easy things difficult :-(

Answer

Wolph picture Wolph · Nov 17, 2010

You can do it like this:

from optparse import make_option

class Command(BaseCommand):
    option_list = BaseCommand.option_list + (
        make_option('--del',
            action='store_true',
            help='Delete poll'),
        make_option('--close',
            action='store_true',
            help='Close poll'),
    )

    def handle(self, close, *args, **kwargs):
        del_ = kwargs.get('del')

Do note that some keywords in Python are reserved so you can handle those using **kwargs. Otherwise you can use normal arguments (like I did with close)