社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

带字符的django concat f函数

Milano • 6 年前 • 1778 次点击  

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

我正试图用这种方式更新数据库。

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

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

我能用做这个手术吗 F 功能?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39208
 
1778 次点击  
文章 [ 1 ]  |  最新文章 6 年前
Willem Van Onsem
Reply   •   1 楼
Willem Van Onsem    6 年前

你利用了 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 这里的意思是“with separator”,但是由于separator是空的,所以与“simple”concat没有区别。

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