例如,如果我要同时搜索用户的名字和姓氏:
我试过了,但是不起作用:
qs = User.objects.all().annotate(name=F('first_name') + ' ' + F('last_name'))
qs = qs.filter(name__icontains='foo bar')
SQL中可能发生此事件吗?
是的,您可以为此使用Concat
[Django-doc]表达式:
from django.db.models import Value
from django.db.models.functions import Concat
User.objects.annotate(
name=Concat('first_name', Value(' '), 'last_name')
).filter(
name__icontains='foo bar'
)
Django会将其转换为如下查询:
SELECT `auth_user`.*,
CONCAT_WS('', `auth_user`.`first_name`, CONCAT_WS('', , `auth_user`.`last_name`)) AS `name`
FROM `auth_user`
WHERE CONCAT_WS('', `auth_user`.`first_name`, CONCAT_WS('', , `auth_user`.`last_name`)) LIKE %foo bar%
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句