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

如何使用Django模型中存储的字段搜索数据库匹配的用户数据

错误原因

你代码的核心问题出在ORM过滤条件的写法上:

  • owner是关联User表的外键字段,该字段的存储值是User对象的主键ID,而你传入的searched是前端提交的用户名字符串,二者类型完全不匹配,所以查询不到任何结果。
  • 要基于外键关联表的字段做过滤,需要用Django ORM的双下划线跨表查询语法,指定关联表的具体字段做匹配。

修正方案

根据你的需求有两种可选写法:

方案1:直接查询符合用户名条件的所有Journal记录

如果你需要的结果是「所有者用户名匹配搜索关键词的所有Journal」,直接修改过滤条件即可:

def search_user(request):
    """Search for users."""
    if request.method == "POST":
        searched = request.POST["searched"]
        # 跨owner外键查询关联User表的username字段,模糊匹配搜索关键词
        usernames = Journal.objects.filter(owner__username__icontains=searched)
        context = {"searched": searched, "usernames": usernames}
        return render(request, "journals/search_user.html", context)

你可以直接通过返回的Journal对象访问关联用户的所有字段,比如journal.owner.email、journal.owner.last_login等。

方案2:先查询匹配的用户,再反向关联Journal

如果你需要的结果是「用户名匹配搜索关键词的所有用户」,同时要获取用户的Journal数据,可以保留你最初的User表查询逻辑,Django会自动生成外键反向引用:

def search_user(request):
    """Search for users."""
    if request.method == "POST":
        searched = request.POST["searched"]
        usernames = User.objects.filter(username__icontains=searched)
        context = {"searched": searched, "usernames": usernames}
        return render(request, "journals/search_user.html", context)

在模板中可以直接通过user.journal_set.all获取该用户创建的所有Journal记录,不需要额外修改查询逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 18:09:02