首页 > 解决方案 > 带有字符的Django concat F函数

问题描述

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

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

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

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

我可以使用F函数执行此操作吗?

标签: djangopython-3.6django-ormdjango-database

解决方案


您使用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意思是“带分隔符”,但由于分隔符是空的,与“简单”的连接没有区别。

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


推荐阅读