带有字符的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函数的主要内容,如果未能解决你的问题,请参考以下文章