Django RawQuerySet.__repr__:格式字符串参数不足

1 投票
1 回答
1246 浏览
提问于 2025-04-17 11:18

我在使用Django的RawQuerySet,需要传递几个参数(总共5个)。我可以通过MyModel.objects.raw(SQL, params)来调用构造函数。SQL语句比较长,不太重要,但params[991L, 991L, 991L, 7L, 3]

我确实得到了一个RawQuerySet作为返回结果,所以这个调用是没问题的。

不过,我的问题是,当调用__repr__(在这里是通过print)时,我遇到了一个"Not enough arguments for format string"的错误。让我困惑的是:

  1. 既然调用成功了,为什么会说参数不够呢?
  2. [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)) 这样来处理。

撰写回答