Ich möchte einen Django-Verwaltungsbefehl von einem meiner Tests aufrufen. Ich verwende dafür django.core.management.call_command
. Und es funktioniert nicht.Djangos call_command schlägt mit fehlenden erforderlichen Argumenten fehl
Ich habe einen Befehl mit 4 erforderlichen Argumenten. Als ich es nenne, werfen sie alle Argumente fehlen, obwohl ich sie bin vorbei:
call_command('my_command', url='12', project='abc', website='zbb', title='12345')
Ich erhalte den Basisbefehlsfehler, die --url, --project, --website und --title fehlt .
Ich habe kein anderes Ziel für diese Argumente angegeben.
I an der call_command
Quelle gesucht und lokalisiert das Problem auf die folgende Zeile in call_command
:
if command.use_argparse:
# Use the `dest` option name from the parser option
opt_mapping = {sorted(s_opt.option_strings)[0].lstrip('-').replace('-', '_'): s_opt.dest
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=args) ****** THIS *****
defaults = dict(defaults._get_kwargs(), **arg_options)
# Move positional args out of options to mimic legacy optparse
args = defaults.pop('args',())
args
die Positions Argumente call_commands übergeben wird, die leer ist. Ich übergebe nur benannte Argumente. parser.parse_args
beschwert sich die erforderlichen Variablen fehlen.
Dies ist in Django 1.8.3.
Hier add_arguments Funktion (I entfernt nur die Hilfe Saiten der Kürze halber) mein Befehl lautet:
def add_arguments(self, parser):
parser.add_argument('--url', action='store', required=True)
parser.add_argument('--project', action='store', required=True)
parser.add_argument('--continue-processing', action='store_true', default=False)
parser.add_argument('--website', action='store', required=True)
parser.add_argument('--title', action='store', required=True)
parser.add_argument('--duplicate', action='store_true',default=False)
zeigen Sie den Code Ihres Befehls (mindestens die Definitionen 'option_list') – Anentropic
Hinzugefügt die Funktion add_arguments function. – zmbq
nennen Sie es wirklich mit 'arg1 = '12 ', arg2 =' abc ', arg3 =' zbb ', arg4 =' 12345'' Schlüsselwörtern args? Ist Ihnen bekannt, dass für die Option 'parser.add_argument ('- url')' das Schlüsselwort arg 'url' sein sollte? – Anentropic