您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

5b51 2022/1/14 8:23:35 python 字数 3496 阅读 621 来源 www.jb51.cc/python

我想从我的一个测试中调用Django管理命令.我正在使用django.core.management.call_command.它不起作用.我有一个带有4个必需参数的命令.当我打电话给它时,即使我传递了它们,它也会抱怨所有参数都丢失了:call_command('my_command', url='12', project='abc', website='z

概述

我想从我的一个测试中调用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',required=True)
    parser.add_argument('--continue-processing',action='store_true',default=False)
    parser.add_argument('--website',required=True)
    parser.add_argument('--title',required=True)
    parser.add_argument('--duplicate',default=False)

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

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

总结

以上是编程之家为你收集整理的python – Django的call_command失败,缺少必需的参数全部内容,希望文章能够帮你解决python – Django的call_command失败,缺少必需的参数所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶