一尘不染

我可以将Django F()对象与字符串串联使用吗?

mysql

我想通过看起来像这样的ORM运行django更新:

MyModel.objects.filter(**kwargs).update(my_field=F('my_other_field')+'a string')

这导致MySQL引发异常。无论如何,不​​编写原始SQL就能做到这一点?


阅读 392

收藏
2020-05-17

共1个答案

一尘不染

发生的事情是Django正在将“ +”传递给SQL-但是SQL不允许将“
+”用于串联,因此它尝试进行数字加法。如果您使用整数代替“字符串”,那么它确实可以将的整数值添加my_other_field到变量中,因此可以正常工作。

这是否是bug尚有争议。查找查询中对象文档F()说明:

Django支持使用加法,减法,乘法,除法和模运算与F()对象

因此可以说您不应该尝试使用它来更新字符串。但这当然没有记录,并且错误消息“ Invalid DOUBLE value”不大有用。我开一张票。

2020-05-17