python - 自定义命令和从许多来源导入的可能性
问题描述
我正在使用 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
解决方案
您使用 argparse 错误。您有两个单独的参数,每个参数都有一个默认值 - 因此,如果您不提供one
,它将被设置为默认值“one”,这违背了目的。
相反,您应该有一个参数 ,source
它的值可以是“一”或“二”:
parser.add_argument('source', type='str', nargs=1, choices=['one', 'two'])
现在你可以这样做:
if options['source'] == 'one':
...
推荐阅读
- c++ - std::uniform_real_distribution 与 std::uniform_int_distribution 性能
- php - 如何在单击按钮时运行 mysql 查询
- c# - EF Core 代码优先与同一主体实体的多个外键关系
- python - 如何使用 tkinter 正确处理表格?
- python - networkx 在左侧和右侧绘制单独的节点 - graphviz,python
- algorithm - 高效查询庞大文档集合中的短语
- plotly-dash - 如何在 Dash-Plotly 中包含基于条件的跟踪
- linux - 重定向中的算术表达式
- laravel - 当测试配置为使用 sqlite 时,测试用例创建重复条目并删除 mysql 数据库条目
- javascript - undefined 不是一个对象(评估 'navigation.navigate') React Native