Какова цель default=False в команде управления django

Я пытаюсь написать команду управления в 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

person acquayefrank    schedule 24.10.2017    source источник
comment
что вы подразумеваете под тем, что в соответствии с документацией по умолчанию установлено значение false? Вы можете установить по умолчанию все, что хотите.   -  person Kos    schedule 24.10.2017


Ответы (2)


первый пример в документах, на которые вы ссылаетесь, предназначен для необязательный именованный аргумент --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/.

person Alasdair    schedule 24.10.2017

Значение default — это то, на что будет установлен аргумент, если он не будет передан в команду.

В вашем случае, если вы вызовете свою команду и не предоставите name через CLI, options['name'] будет установлено на False (ваше значение default).

person TeaPow    schedule 24.10.2017
comment
В приведенном выше примере name является обязательным аргументом, поэтому значение по умолчанию использоваться не будет. Вместо этого вы получите error: too few arguments. - person Alasdair; 24.10.2017