django管理命令中default = False的目的是什么?

时间:2017-10-24 10:30:17

标签: python django django-management-command

我试图在django中编写管理命令。根据{{​​3}}默认设置为False。我假设默认值是传递的参数的默认值。 documentation

说明deafult=False

的好处是什么?
class Command(BaseCommand):
    help = "helps in doing stuff"

    def add_arguments(self, parser):
        parser.add_argument(
            'name', type=str, default=False,
            help="The name of the folder to be created")

    def handle(self, *args, **options):
        pass

2 个答案:

答案 0 :(得分:2)

您链接到的文档中的first example用于可选的命名参数--delete。设置action='store_true'表示如果在命令中包含--delete,则args.delete将设置为True,如果命令中未包含--delete,则它会default=False

在这种情况下,实际上并不需要设置default=False,因为这是action='store_true'的行为。明确设置default=False的好处是行为清晰,无需查找argparse文档。

    parser.add_argument(
        '--delete',
        action='store_true',
        dest='delete',
        default=False,
        help='Delete poll instead of closing it',
    )

您的示例没有意义,因为name不是可选参数。

parser.add_argument(
    'name', type=str, default=False,
    help="The name of the folder to be created")

如果您尝试此示例,则会收到类似too few arguments的错误。

parser.add_argument(
    'name', type=str, default=False
    help="The name of the folder to be created")

如果您希望nargs='?'参数是可选的,则需要设置name。在这种情况下,将使用您的默认值。如果您没有设置它,则默认为None

parser.add_argument(
    'name', type=str, nargs='?', default=False,
    help="The name of the folder to be created")

请注意,如果您的参数是要创建的文件夹的名称,则将默认值设置为False可能没有意义。似乎要么需要参数(在这种情况下不需要默认值),或者默认值应该是一个字符串,例如/path/to/folder/

答案 1 :(得分:1)

如果参数未传递给命令,则default的值是参数的设置。

在您的情况下,如果您通过CLI调用命令并且未提供name,则options['name']将设置为False(您的default值)