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

如何在Django中按ID或用户名查询用户?解决查询报错问题

解决Django用户查询的ValueError问题及正确搜索方法

嘿,我刚碰到过类似的坑,马上帮你捋清楚!

错误原因分析

你遇到的ValueError: invalid literal for int() with base 10: 'Usuario1',核心问题是Django的User模型中id字段是整数类型,但你传入了字符串'Usuario1'来匹配id。Django会自动尝试把查询值转换成字段对应的类型,字符串转整数失败就抛出了这个错误——显然你这里可能是把用户名误传到了user_s['id']的位置,或者输入的id参数本身就是非数字内容。

修复后的查询代码

我们需要先对id参数做类型校验,确保只有有效的整数才用来匹配id字段,否则只通过用户名查询。修改后的代码如下:

from django.db.models import Q
from django.contrib.auth.models import User

try:
    query = Q()
    # 处理ID查询:先尝试转换为整数,无效则跳过
    id_input = user_s.get('id')
    if id_input:
        try:
            valid_id = int(id_input)
            query |= Q(id=valid_id)
        except ValueError:
            # 输入不是有效整数,忽略ID查询条件
            pass
    
    # 处理用户名查询
    username_input = user_s.get('username')
    if username_input:
        query |= Q(username=username_input)
    
    # 执行查询
    user = User.objects.filter(query)
    if not user.exists():
        # 这里写用户不存在的处理逻辑
        print("用户不存在")
    else:
        # 处理找到用户的逻辑
        print(f"找到用户:{user.first()}")
except Exception as e:
    # 捕获其他可能的异常
    print(f"查询出错:{str(e)}")

Django中搜索用户的常用方法

1. 精确匹配(ID或用户名)

如果需要严格匹配ID(数字)或用户名,一定要注意类型校验,就像上面的代码那样,避免类型转换错误。如果确定输入的ID是有效整数,也可以简化:

user = User.objects.filter(Q(id=123) | Q(username="Usuario1")).first()

2. 模糊匹配用户名

如果需要支持用户名模糊搜索(比如包含某个关键词),可以用__icontains(不区分大小写)或__contains(区分大小写):

# 查找用户名包含"user"的用户
users = User.objects.filter(username__icontains="user")

3. 快捷函数:get_object_or_404

如果你期望查询结果只有一个用户,可以用这个快捷函数,它会在找不到用户时抛出404异常,或者找到多个时抛出MultipleObjectsReturned异常:

from django.shortcuts import get_object_or_404

try:
    # 先尝试用ID查询,失败则用用户名
    user = get_object_or_404(User, id=int(user_s['id']))
except (ValueError, User.DoesNotExist):
    user = get_object_or_404(User, username=user_s['username'])

4. 表单/API输入校验

如果你的user_s来自前端表单或API请求,最好在输入层就做校验:比如用Django表单的IntegerField来接收ID参数,自动校验是否为整数,这样后端就不用处理无效输入了。

内容的提问来源于stack exchange,提问作者J.leo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:27:33