【问题标题】:Django concat F function with character带有字符的Django concat F函数
【发布时间】:2019-03-25 14:24:04
【问题描述】:
我有一个具有group_id CharField 的模型。此字段应等于对象的 pk 并带有“#”前缀。
我正在尝试以这种方式更新数据库。
MyModel.objects.update(group_id=f'#{F("pk")}')
但这不起作用。实际上,它为所有对象设置了'#F(pk)' 字符串。
我可以用F函数做这个操作吗?
【问题讨论】:
标签:
django
python-3.6
django-orm
django-database
【解决方案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 可以接受使用此表达式生成的值)。