4

我正在尝试在 django 中编写管理命令。根据文档默认设置为 False。我会假设默认值是正在传递的参数的默认值。 使 django 自定义管理命令参数“不需要”

这么说有什么好处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
4

2 回答 2

8

您链接到的文档中的第一个示例--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/.

于 2017-10-24T10:40:29.047 回答
1

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

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

于 2017-10-24T10:32:43.403 回答