如何在Django中存储用户输入并通过ORM匹配SQLite数据行
Django 条码匹配查询实现方案
先修正代码中的基础错误
你的views.py里模型导入路径有误,Django无法找到当前app下的模型,需要修改为:
from .models import Inventory # 新增开头的点,表示当前目录
完善search函数的匹配逻辑
现有代码已经实现了精确匹配,但缺少空输入处理、请求方法兼容以及结果状态反馈,优化后的代码如下:
from django.shortcuts import render from .models import Inventory def index(request): return render(request, 'form.html') def search(request): # 获取输入并去除首尾空格,默认空字符串避免None search_input = request.POST.get('barcode', '').strip() # 初始化结果集合 matched_items = [] if search_input: # 精确匹配:完全匹配输入的条码 matched_items = Inventory.objects.filter(item_bc=search_input) # 如果需要模糊匹配(支持部分条码匹配,不区分大小写),替换为下面一行 # matched_items = Inventory.objects.filter(item_bc__icontains=search_input) # 将匹配结果和输入内容传给模板 return render(request, 'result.html', { "matched_items": matched_items, "search_input": search_input })
补充模板文件实现
form.html(查询表单页)
必须添加{% csrf_token %}防止Django的CSRF拦截,表单提交路径使用URL名称保证灵活性:
<!DOCTYPE html> <html> <head> <title>条码查询</title> </head> <body> <h1>库存条码查询</h1> <form method="POST" action="{% url 'search' %}"> {% csrf_token %} <input type="text" name="barcode" placeholder="输入条码" value="{{ search_input }}"> <button type="submit">查询</button> </form> </body> </html>
result.html(结果展示页)
根据匹配状态展示不同内容,清晰反馈查询结果:
<!DOCTYPE html> <html> <head> <title>查询结果</title> </head> <body> <h1>查询结果</h1> {% if matched_items %} <p>共找到{{ matched_items|length }}条匹配记录:</p> <table border="1"> <tr> <th>条码</th> <th>商品详情</th> </tr> {% for item in matched_items %} <tr> <td>{{ item.item_bc }}</td> <td>{{ item.item_details }}</td> </tr> {% endfor %} </table> {% else %} {% if search_input %} <p>未找到与「{{ search_input }}」匹配的库存记录</p> {% else %} <p>请输入条码进行查询</p> {% endif %} {% endif %} <br> <a href="{% url 'index' %}">返回查询页</a> </body> </html>
关键说明
- 精确/模糊匹配选择:
- 精确匹配使用
item_bc=search_input,适合条码唯一的场景 - 模糊匹配使用
item_bc__icontains=search_input,支持部分字符匹配,__icontains不区分大小写,换成__contains则区分大小写
- 精确匹配使用
- 空输入处理:判断输入为空时不执行查询,避免返回全量数据
- 模板渲染:直接传递模型实例的QuerySet给模板,比
values()更直观,可直接访问模型字段
内容的提问来源于stack exchange,提问作者Meet Patel
相关产品推荐
相关产品推荐

