Tôi muốn gọi lệnh quản lý Django từ một trong các thử nghiệm của mình. Tôi đang sử dụng django.core.management.call_command
cho việc này. Và nó không hoạt động.Lệnh gọi Django không thành công với các đối số bắt buộc bị thiếu
Tôi có lệnh với 4 đối số bắt buộc. Khi tôi gọi nó, nó than phiền tất cả các đối đang thiếu mặc dù tôi đi qua họ:
call_command('my_command', url='12', project='abc', website='zbb', title='12345')
tôi nhận được lỗi lệnh cơ sở mà --url, --project, --website và --title bị thiếu .
Tôi không chỉ định đích khác cho các đối số này.
tôi nhìn vào nguồn call_command
và xác định chính xác vấn đề để các dòng sau trong 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
là các đối số vị trí truyền cho call_commands, đó là sản phẩm nào. Tôi chỉ đi qua các đối số được đặt tên. parser.parse_args
than phiền các biến bắt buộc bị thiếu.
Đây là trong Django 1.8.3.
Đây là chức năng add_arguments lệnh của tôi (Tôi chỉ cần loại bỏ các dây giúp đỡ cho ngắn gọn):
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)
hiển thị mã lệnh của bạn (ít nhất là các định nghĩa 'option_list') – Anentropic
Đã thêm nguồn chức năng add_arguments. – zmbq
là bạn thực sự gọi nó với 'arg1 = '12 ', arg2 =' abc ', arg3 =' zbb ', arg4 =' 12345'' từ khóa args? bạn có biết rằng đối với tùy chọn 'parser.add_argument ('- url')' từ khóa arg phải là 'url'? – Anentropic