如何在Django对象中注解字符串 拼接姓名字段返回0值该如何解决
错误原因
你直接使用+运算符拼接F()引用的字符串字段时,Django会默认将该运算识别为数值加法而非字符串拼接,字符串转数值失败时就会返回0,这就是你查询得到full_name值为0的原因。
正确实现方式
你需要使用Django内置的Concat函数完成字符串拼接操作,步骤如下:
- 首先导入需要的工具类:
from django.db.models import Value from django.db.models.functions import Concat
- 修改查询语句,用
Concat拼接字段,注意两个姓名中间需要插入空格:
Customer.objects.annotate( full_name=Concat('first_name', Value(' '), 'last_name') ).filter(full_name='Filan Fisteku')
如果部分场景下字段可能为空,也可以手动指定输出字段类型避免异常:
from django.db.models import CharField Customer.objects.annotate( full_name=Concat( 'first_name', Value(' '), 'last_name', output_field=CharField() ) ).filter(full_name='Filan Fisteku')
内容的提问来源于stack exchange,提问作者maca
相关产品推荐
相关产品推荐

