diff options
| author | Alex Tomic <atomic777@gmail.com> | 2018-03-02 12:25:08 -0500 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2018-03-02 12:25:08 -0500 |
| commit | a1a3e515616da102fc48a1e1af8a5b2f429f747e (patch) | |
| tree | 9b4d8d0fc4de50f09aa6be39a4ed00842a5ce2bb /django/core/management/__init__.py | |
| parent | 40bac28faabbacd0875e59455cd80fb1dbb16966 (diff) | |
Fixed #29133 -- Fixed call_command() crash if a required option is passed in options.
Diffstat (limited to 'django/core/management/__init__.py')
| -rw-r--r-- | django/core/management/__init__.py | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/django/core/management/__init__.py b/django/core/management/__init__.py index 4d26c98d09..688340e49d 100644 --- a/django/core/management/__init__.py +++ b/django/core/management/__init__.py @@ -117,7 +117,14 @@ def call_command(command_name, *args, **options): for s_opt in parser._actions if s_opt.option_strings } arg_options = {opt_mapping.get(key, key): value for key, value in options.items()} - defaults = parser.parse_args(args=[str(a) for a in args]) + parse_args = [str(a) for a in args] + # Any required arguments which are passed in via **options must must be + # passed to parse_args(). + parse_args += [ + '{}={}'.format(min(opt.option_strings), arg_options[opt.dest]) + for opt in parser._actions if opt.required and opt.dest in options + ] + defaults = parser.parse_args(args=parse_args) defaults = dict(defaults._get_kwargs(), **arg_options) # Raise an error if any unknown options were passed. stealth_options = set(command.base_stealth_options + command.stealth_options) |
