How does one use Django custom management command option?

前端 未结 2 1640
故里飘歌
故里飘歌 2021-01-31 11:19

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):         


        
相关标签:
2条回答
  • 2021-01-31 11:38

    A little suggestion about defining the commands (key name, dest) and handling default values (in make_option and in the command):

    class Command(BaseCommand):
        option_list = BaseCommand.option_list + (
            make_option('--del',
                action='store_true',
                help='Delete all polls.',
                dest='your_name_for_delete',
                default=False),
            make_option('--close',
                action='store_true',
                help='Close all polls.'),
        )
    
        def handle(self, close, *args, **options):
            if options.get('your_name_for_delete'):
                Poll.objects.delete()
            if options.get('close', False):
                Poll.objects.update(closed=True)
    

    In Django code you'll find "keyword arguments" (**kwargs) often named as **options, which is more suggestive (I stick to this naming convention).

    The default value can be either specified in make_option, or through the dict.get method, which allows for a default value.

    There's no reason not u use both defaults, should your Command.handle method be called manually, where the **options dictionary could be missing this entry.

    0 讨论(0)
  • 2021-01-31 11:55

    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)

    0 讨论(0)
提交回复
热议问题