Django RawQuerySet.__repr__:格式字符串参数不足
我在使用Django的RawQuerySet
,需要传递几个参数(总共5个)。我可以通过MyModel.objects.raw(SQL, params)
来调用构造函数。SQL语句比较长,不太重要,但params
是[991L, 991L, 991L, 7L, 3]
。
我确实得到了一个RawQuerySet
作为返回结果,所以这个调用是没问题的。
不过,我的问题是,当调用__repr__
(在这里是通过print
)时,我遇到了一个"Not enough arguments for format string"
的错误。让我困惑的是:
- 既然调用成功了,为什么会说参数不够呢?
[m.start() for m in re.finditer('%s', qs.raw_query)]
给了我5个项目,qs.params
也是一样。
我很确定我漏掉了什么,但就是找不到。
1 个回答
2
我最终找到了这个问题的解释。我不确定这对其他人是否有太大帮助,不过还是分享一下。
问题出在调用时,params
是一个 list
(列表)。看起来你可以用 list
来创建一个 RawQuerySet
,但是它不会被转换成元组,所以后面在字符串格式化时就不能用了。
总结一下,我会用 MyModel.objects.raw(SQL, tuple(params))
这样来处理。