具有字符的 Django concat F 函数

Django concat F function with character

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

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

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

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

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

您使用了Concat [Django-doc]函数:

from django.db.models import F, Value
from django.db.models.functions import <b>Concat</b>

MyModel.objects.update(group_id=<b>Concat(</b>Value('#'), F('pk')<b>)</b>)

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

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

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

这里的_WS表示"with separator",但是由于分隔符是空的,所以和"simple" concat没有区别。

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