diff --git a/django/core/management/base.py b/django/core/management/base.py index 0a4a1ee2f3..3c3e5948aa 100644 --- a/django/core/management/base.py +++ b/django/core/management/base.py @@ -300,6 +300,9 @@ class BaseCommand(object): """ if not self.use_argparse: + def store_as_int(option, opt_str, value, parser): + setattr(parser.values, option.dest, int(value)) + # Backwards compatibility: use deprecated optparse module warnings.warn("OptionParser usage for Django management commands " "is deprecated, use ArgumentParser instead", @@ -307,8 +310,8 @@ class BaseCommand(object): parser = OptionParser(prog=prog_name, usage=self.usage(subcommand), version=self.get_version()) - parser.add_option('-v', '--verbosity', action='store', dest='verbosity', default='1', - type='choice', choices=['0', '1', '2', '3'], + parser.add_option('-v', '--verbosity', action='callback', dest='verbosity', default=1, + type='choice', choices=['0', '1', '2', '3'], callback=store_as_int, help='Verbosity level; 0=minimal output, 1=normal output, 2=verbose output, 3=very verbose output') parser.add_option('--settings', help=( diff --git a/docs/releases/1.8.3.txt b/docs/releases/1.8.3.txt index 653df608cc..d7e063b397 100644 --- a/docs/releases/1.8.3.txt +++ b/docs/releases/1.8.3.txt @@ -62,3 +62,7 @@ Bugfixes * Fixed ``SimpleTestCase.assertRaisesMessage()`` on Python 2.7.10 (:ticket:`24903`). + +* Provided better backwards compatibility for the ``verbosity`` argument in + ``optparse`` management commands by casting it to an integer + (:ticket:`24769`). diff --git a/tests/user_commands/management/commands/optparse_cmd.py b/tests/user_commands/management/commands/optparse_cmd.py index b92e90ee31..0ab74837d8 100644 --- a/tests/user_commands/management/commands/optparse_cmd.py +++ b/tests/user_commands/management/commands/optparse_cmd.py @@ -16,4 +16,5 @@ class Command(BaseCommand): options["example"] # BaseCommand default option is available options['verbosity'] + assert isinstance(options['verbosity'], int), "verbosity option is not int, but %s" % type(options['verbosity']) self.stdout.write("All right, let's dance %s." % options["style"])