带有字符的Django concat F函数

Posted

技术标签:

【中文标题】带有字符的Django concat F函数【英文标题】:Django concat F function with character 【发布时间】:2019-03-25 14:24:04 【问题描述】:

我有一个具有group_id CharField 的模型。此字段应等于对象的 pk 并带有“#”前缀。

我正在尝试以这种方式更新数据库。

MyModel.objects.update(group_id=f'#F("pk")')

但这不起作用。实际上,它为所有对象设置了'#F(pk)' 字符串。

我可以用F函数做这个操作吗?

【问题讨论】:

【参考方案1】:

你使用Concat [Django-doc]函数:

from django.db.models import F, Value
from django.db.models.functions import Concat

MyModel.objects.update(group_id=Concat(Value('#'), F('pk')))

这将生成一个如下所示的查询:

UPDATE app_mymodel
SET group_id = CONCAT_WS('', '#', app_mymodel.pk)

(在本地我得到了这个查询,但它可能取决于后端等)

这里的_WS表示“带分隔符”,但由于分隔符是空的,与“简单”的concat相比没有区别。

请注意,这里的group_id 当然应该有一个类型(可能CharField 可以接受使用此表达式生成的值)。

【讨论】:

以上是关于带有字符的Django concat F函数的主要内容,如果未能解决你的问题,请参考以下文章

mysql 常用函数

wm_concat()函数

是否可能有两个带有一个条件的“ THEN”语句?

在带有函数的 MySQL GROUP_CONCAT 中排序

实训--mybatics--之模糊查找-concat

MYSQL的常用函数(字符串函数)