gpt4 book ai didi

python - Django 的 call_command 因缺少必需参数而失败

转载 作者:太空狗 更新时间:2023-10-30 01:21:21 25 4
gpt4 key购买 nike

我想从我的一个测试中调用 Django 管理命令。为此,我正在使用 django.core.management.call_command。而且它不起作用。

我有一个包含 4 个必需参数的命令。当我调用它时,它提示所有参数都丢失,即使我正在传递它们:

call_command('my_command', url='12', project='abc', website='zbb', title='12345')

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

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

我查看了 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', ())

args 是传递给 call_commands 的位置参数,为空。我只传递命名参数。 parser.parse_args 提示缺少必需的变量。

这是在 Django 1.8.3 中。

这是我命令的 add_arguments 函数(为简洁起见,我只是删除了帮助字符串):

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)

最佳答案

根据您发布的那段代码,我得出结论 call_command argument is required

必须通过 *args 传递所需的命名参数,而不仅仅是位置参数。

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

关于python - Django 的 call_command 因缺少必需参数而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31919101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com