django - 带有字符的Django concat F函数
问题描述
我有一个模型,它有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 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
可以接受使用此表达式生成的值)。
推荐阅读
- android - “此模板使用 shell,UWP 尚不支持。”
- laravel-5.7 - “语法错误或访问冲突” - 从 Schema:: 外观迁移,但语句执行没有错误
- c# - 从 c# 了解 docker linux 容器中是否存在目录
- c++ - 如何解耦 C++ 项目标头依赖项?
- usb - 无法挂载 ext4 格式的 USB
- php - Laravel7 在刀片文件中使用函数
- python - 在单独的线程中启动异步事件循环并使用队列项
- javascript - TS 中“每个”函数的 TypeError
- php - 数据库中的json数据同步
- ruby-on-rails - Rails:在没有模型或数据库连接的情况下使用 sanitize_sql_for_conditions