簡體   English   中英

Django的call_command失敗,缺少必需的參數

[英]Django's call_command fails with missing required arguments

我想從我的一個測試中調用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參數中得出結論是必需的

所需的命名參數必須通過*args傳遞,而不僅僅是位置傳遞。

**kwargs繞過解析器。 所以它沒有看到你在那里定義的任何內容。 **kwargs可能會覆蓋*args值,但*args仍需要每個必需參數的內容。 如果您不想這樣做,請關閉required屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM