You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Django中实现同时搜索用户first name和last name的功能

实现方案

你只需要修改views.py中的搜索过滤逻辑即可,具体操作如下:

步骤1:导入Django数据库函数

在views.py顶部添加以下导入语句:

from django.db.models import Value
from django.db.models.functions import Concat

步骤2:修改搜索过滤逻辑

把原来的User.objects.filter(...)部分替换为以下代码,新增拼接完整姓名匹配的规则:

if (search_post is not None) and search_post:
    # 先去除搜索内容中多余的连续空格和首尾空格,避免匹配异常
    search_post = ' '.join(search_post.strip().split())
    # 拼接first_name和last_name为完整姓名,增加完整姓名匹配规则
    allusername = User.objects.annotate(
        full_name=Concat('first_name', Value(' '), 'last_name')
    ).filter(
        Q(first_name__icontains=search_post) | 
        Q(last_name__icontains=search_post) | 
        Q(username__icontains=search_post) | 
        Q(email__icontains=search_post) |
        Q(full_name__icontains=search_post)
    )
    if not allusername:
        allusername = User.objects.all().order_by("-date_joined")

如果需要支持「姓+名」顺序的搜索,只要在filter的OR条件里再增加一行即可:

Q(Concat('last_name', Value(' '), 'first_name')__icontains=search_post)

可选优化:修改搜索提示文案

你可以把allstaff.html里的搜索提示<h5>Search for Staff First Name/ Staff Username</h5>修改为<h5>搜索员工姓名、用户名、邮箱</h5>,和现有搜索能力匹配。

修改完成后,输入admin Tan这类组合姓名就能直接匹配到对应用户了,原有的单个字段搜索能力也不会受影响。

内容的提问来源于stack exchange,提问作者Rainysky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:27:01