首页 > 解决方案 > 自定义命令和从许多来源导入的可能性

问题描述

我正在使用 django 1.8 进行导入。我想有可能从两个来源导入数据 - 一个和两个。

如果我输入命令参数一 ( python manage.py import_data one) - 我从一个导入数据,并且与两个相同 - 命令中的两个 - 从源二 ( python manage.py import_data two)。

但是现在,当我想python manage.py import_data two在句柄中运行时,我接受了one而不是two.

class Command(BaseCommand):
    def add_arguments(self, parser):
        parser.add_argument('one', type=str, nargs='?', default='one')
        parser.add_argument('two', type=str, nargs='?', default='two')

    def handle(self, *args, **options):
        if options['one']:
            print('one')
            return
        if options['two']:
            print('two')
            return

标签: pythondjangoimportcommandarguments

解决方案


您使用 argparse 错误。您有两个单独的参数,每个参数都有一个默认值 - 因此,如果您不提供one,它将被设置为默认值“one”,这违背了目的。

相反,您应该有一个参数 ,source它的值可以是“一”或“二”:

parser.add_argument('source', type='str', nargs=1, choices=['one', 'two'])

现在你可以这样做:

if options['source'] == 'one':
    ...

推荐阅读