【发布时间】:2012-11-01 12:30:37
【问题描述】:
和许多其他人一样,我一直在通过构建一个测试应用来学习使用 django 进行 Web 开发。我已经建立了基本模型。我已经使用夹具填充了一些表,其中包含进一步测试所需的绝对最小数据。
现在对于不同的表,我想通过一个自定义管理命令创建数据元组,该命令采用所需的参数。如果这按预期工作,我将通过添加--save 选项将创建的数据保存到数据库中。
命令的语法是这样的
create_raw_data owner_id temperature [--save]
其中owner_id 是必需的,temperature(在 C 中)是可选的。在 Handle 方法中,我使用 factory boy 来创建带有给定参数等的 raw_data。
我确实遇到了一些问题,但是在 SO、google、django docs 等上搜索,我的命令运行良好。
除非我输入负温度...
然后我得到以下错误
Usage: C:\test\manage.py create_raw_data [options]
Creates a RawData object. Usage: create_raw_data owner_id temperature [--save]
C:\test\manage.py: error: no such option: -5
我用来解析 args 的代码是这样的
for index, item in enumerate(args):
if index == 0:
owner_id = int(item)
else index == 1:
temp = int(item)
我将print(args) 作为Handle 内的第一行,但似乎控制还没有到达这里。
我不确定出了什么问题...请帮助...
非常感谢
【问题讨论】:
-
搜索“django 转义字符” - 减号被视为选项的指示符,您必须告诉 django 这不是选项,而是您的参数之一
-
如果你用反斜杠转义 - 会发生什么?
\-5 -
我无法让自定义命令正确调试。想通了这一点,再加上@KevinDTimm 的提示,似乎问题出在 optparse 的 parse_args 方法上。我在很多地方读到过,虽然 optparse 已被弃用,而是推荐使用 argparse,但 django 建议使用 optparse,因为这就是它所使用的。长话短说,link 的链接提出了一些替代方案,使用 create_raw_data 1 -- -5 可以按预期工作。所以我确实得到了解决方法。谢谢。
-
@dm03514 - 我首先尝试了 \-5。这给出了 ValueError: invalid literal for int() with base 10: '\\-5'
-
既然问题已排序......我应该删除问题还是以某种方式将其标记为已回答......
标签: django