Django的call_command失败,缺少必需的参数

时间:2015-08-10 12:05:46

标签: python django argparse

我想从我的一个测试中调用Django管理命令。我正在使用MessageBox。它不起作用。

我有一个包含4个必需参数的命令。当我打电话给它时,它抱怨所有的论点都丢失了,即使我正在传递它们:

django.core.management.call_command

我收到基本命令错误--url, - project, - website和--title缺失。

我没有为这些参数指定不同的目的地。

我查看了call_command('my_command', url='12', project='abc', website='zbb', title='12345') 来源并将问题精确定位到call_command中的以下行:

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', ()) 是传递给call_commands的位置参数,它是空的。我只传递命名参数。 args抱怨所需的变量丢失。

这是在Django 1.8.3中。

这是我的命令的add_arguments函数(我刚刚删除了帮助字符串):

parser.parse_args

1 个答案:

答案 0 :(得分:3)

根据您发布的那段代码,我已在call_command argument is required

中得出结论

所需的命名参数必须通过for (int i = 0; i < TreeManager.m_treeCount; i++) { var tree = TreeManager.instance.m_trees[i]; TreeManager.instance.ReleaseTree(tree); } 传递,而不仅仅是位置传递。

*args绕过解析器。所以它没有看到你在那里定义的任何东西。 **kwargs可能会覆盖**kwargs值,但*args仍需要每个必需参数的内容。如果您不想这样做,请关闭*args属性。