2016-02-25 50 views
3

我试图写在Django自定义管理命令如下─一样制作Django的自定义管理命令参数“不需要”

class Command(BaseCommand): 

    def add_arguments(self, parser): 
     parser.add_argument('delay', type=int) 

    def handle(self, *args, **options): 
     delay = options.get('delay', None) 
     print delay 

现在,当我运行python manage.py mycommand 12它是在控制台打印12。这很好。

现在,如果我尝试运行python manage.py mycommand那么我想要的是,该命令默认在控制台上打印21。但它给我像这个 -

usage: manage.py mycommand [-h] [--version] 
          [-v {0,1,2,3}] 
          [--settings SETTINGS] 
          [--pythonpath PYTHONPATH] 
          [--traceback] 
          [--no-color] 
          delay 

所以,现在,我应该怎么做的命令参数“不需要”,并采取默认值,如果没有给定值?

+2

难道你想改变这个'延迟= options.get('delay',None)'这个'delay = options.get('delay',21)'来处理默认值?只是一个猜测。 – idjaw

回答

10

一个从documentation配方的建议:

对于NARGS等于?*位置参数,当没有命令行参数存在的default值被使用。

所以下面应该做的伎俩(如果提供或将返回值默认值,否则):

parser.add_argument('delay', type=int, nargs='?', default=21) 

用法:

$ ./manage.py mycommand 
21 
$ ./manage.py mycommand 4 
4