鱼C论坛

 找回密码
 立即注册
查看: 1186|回复: 1

[已解决]django的搜索不能正常使用

[复制链接]
发表于 2023-4-21 17:47:25 | 显示全部楼层 |阅读模式
5鱼币
def cs(request):
    da = {}
    n = request.GET.get('q')
    if n:
        da["name"] = n
    ss = models.Userinfo.objects.filter(**da)
    print(ss)


前台输入对应的信息后台显示 对应的name的数据 正常不是应该显示id吗

3}E8S2({)UF`O[QLQM3KQPQ.png
且前台输入数据 其他不符合的数据还是在前台显示


————————————————————
html文件

{% extends 'rootyongh.html' %}
{% block b %}
    <div class="bs-example" data-example-id="panel-without-body-with-table">
    <div class="panel panel-default">
      <!-- Default panel contents -->
      <div class="panel-heading">用户信息
          <form method="get">
    <div class="input-group">
      <input type="text" name="q" class="form-control" placeholder="Search for...">
        </form>
      <span class="input-group-btn">
        <button class="btn btn-default" type="submit"><span class="glyphicon glyphicon-search" aria-hidden="true"></span></button>
      </span>
    </div><!-- /input-group -->
  </div><!-- /.col-lg-6 -->
</div><!-- /.row -->
      <!-- Table -->
      <table class="table">
          <tr>
    {% for s in deat %}
        <tr>
          <td align="left">{{ s.id }}</td>
          <td align="left">{{ s.name }}</td>
         <td align="left">{{ s.password }}</td>
         <td align="left">{{ s.age }}</td>
         <td align="left">{{ s.daa }}</td>

                 <td>
             <a href="http://127.0.0.1:8000/edit/{{ s.id }}/edit">编辑</a>
         </td>
        <td>
             <a href="http://127.0.0.1:8000/delete/{{ s.id }}/delete"} >删除</a>
        </tr>
    {% endfor %}
   </table>
          </tr>
        </tbody>
      </table>
    </div>
  </div>
{% endblock %}
最佳答案
2023-4-21 17:47:26
从您提供的代码来看,您的问题主要有以下两点:

1. 后台显示对应的 `name` 数据而不是 `id`。
2. 输入不匹配的数据,前端依然显示了所有的数据。

针对这两个问题,我有以下建议:

问题1:后台显示对应的 `name` 数据而不是 `id`

您的代码中使用了 `print(ss)` 输出查询结果。查询结果 `ss` 是一个包含 `Userinfo` 对象的 QuerySet,这意味着每个元素都是一个完整的 Userinfo 对象,包含所有属性(id、name、password 等)。要仅显示查询结果的 `id`,您可以在 `print` 语句中使用列表推导式提取每个对象的 `id`。修改如下:
print([s.id for s in ss])

问题2:输入不匹配的数据,前端依然显示了所有的数据

这个问题的原因是您在搜索时没有更新 `deat` 变量,而前端代码中的 `deat` 变量用于渲染表格数据。您需要将查询结果 `ss` 传递给前端模板以便在表格中渲染正确的数据。修改如下:
from django.shortcuts import render

def cs(request):
    da = {}
    n = request.GET.get('q')
    if n:
        da["name"] = n
    ss = models.Userinfo.objects.filter(**da)
    print([s.id for s in ss])
    return render(request, 'your_template_name.html', {'deat': ss})

这里,你需要将 `'your_template_name.html'` 替换为您实际使用的模板文件名。

现在,当用户输入搜索关键字时,前端页面应该仅显示与关键字匹配的数据。如果没有输入关键字,页面将显示所有数据。

最佳答案

查看完整内容

从您提供的代码来看,您的问题主要有以下两点: 1. 后台显示对应的 `name` 数据而不是 `id`。 2. 输入不匹配的数据,前端依然显示了所有的数据。 针对这两个问题,我有以下建议: 问题1:后台显示对应的 `name` 数据而不是 `id` 您的代码中使用了 `print(ss)` 输出查询结果。查询结果 `ss` 是一个包含 `Userinfo` 对象的 QuerySet,这意味着每个元素都是一个完整的 Userinfo 对象,包含所有属性(id、name、password ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-21 17:47:26 | 显示全部楼层    本楼为最佳答案   
从您提供的代码来看,您的问题主要有以下两点:

1. 后台显示对应的 `name` 数据而不是 `id`。
2. 输入不匹配的数据,前端依然显示了所有的数据。

针对这两个问题,我有以下建议:

问题1:后台显示对应的 `name` 数据而不是 `id`

您的代码中使用了 `print(ss)` 输出查询结果。查询结果 `ss` 是一个包含 `Userinfo` 对象的 QuerySet,这意味着每个元素都是一个完整的 Userinfo 对象,包含所有属性(id、name、password 等)。要仅显示查询结果的 `id`,您可以在 `print` 语句中使用列表推导式提取每个对象的 `id`。修改如下:
print([s.id for s in ss])

问题2:输入不匹配的数据,前端依然显示了所有的数据

这个问题的原因是您在搜索时没有更新 `deat` 变量,而前端代码中的 `deat` 变量用于渲染表格数据。您需要将查询结果 `ss` 传递给前端模板以便在表格中渲染正确的数据。修改如下:
from django.shortcuts import render

def cs(request):
    da = {}
    n = request.GET.get('q')
    if n:
        da["name"] = n
    ss = models.Userinfo.objects.filter(**da)
    print([s.id for s in ss])
    return render(request, 'your_template_name.html', {'deat': ss})

这里,你需要将 `'your_template_name.html'` 替换为您实际使用的模板文件名。

现在,当用户输入搜索关键字时,前端页面应该仅显示与关键字匹配的数据。如果没有输入关键字,页面将显示所有数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-28 18:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表