【问题标题】:What is the purpose of default=False in django management commanddjango管理命令中default = False的目的是什么
【发布时间】:2018-04-05 02:41:20
【问题描述】:

我正在尝试在 django 中编写管理命令。根据documentation 默认设置为False。我会假设默认值是正在传递的参数的默认值。 Make django custom management command argument "Not Required"

声明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

【问题讨论】:

  • “根据文档默认设置为 false”是什么意思?您可以将默认设置为任何您想要的。

标签: python django django-management-command


【解决方案1】:

您链接到的文档中的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")

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

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

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

【讨论】:

    【解决方案2】:

    default 的值是参数在未传递给命令时将被设置的值。

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

    【讨论】:

    • 对于上面的例子,name 是必填参数,所以不会使用默认值。相反,你会得到error: too few arguments
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 2012-06-29
    相关资源
    最近更新 更多