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

如何将HTML表单输入值传递至Django视图完成数据库模型查询

Django表单传参查询数据库实现方案

你现有代码有两处核心问题,按以下步骤修正即可:


1. 修正HTML表单代码

你原代码里method属性拼写错误(写成了metohd),同时补充必要的属性避免兼容问题:

<!-- 替换你原有的form代码,把action里的视图名换成你urls.py里配置的from_DB视图的name值 -->
<form method="GET" id="figure_choice_form" action="{% url 'from_DB' %}">
    <label for="figure_id">Enter ID</label>
    <input type="text" id="figure_id" name="figure_id" required>
    <button type="submit">Submit</button>
</form>

如果你暂时没给路由配name,也可以直接写路由路径,比如action="/get-figure/",和你urls.py里的路径保持一致即可。


2. 修正视图层参数提取与查询逻辑

GET请求提交的所有表单参数都存储在request.GET字典对象中,不能直接把request对象传给ORM查询,同时要加参数合法性校验避免报错:

from django.shortcuts import render, get_object_or_404
from .models import Figure

def from_DB(request):
    # 从GET参数中取name为figure_id的值,取不到默认返回None
    figure_id = request.GET.get('figure_id')
    figures_list = []
    
    # 校验参数:必须有值、且为数字(因为数据库id是整数类型)
    if figure_id and figure_id.isdigit():
        # 过滤查询匹配的记录
        figures_list = Figure.objects.filter(id=figure_id)
        # 如果你确定一个ID只对应一条记录,也可以用下面这行直接拿单条,匹配不到自动返回404页面
        # figure = get_object_or_404(Figure, id=figure_id)
        # context = {"figure": figure}

    context = {
        "figures_list": figures_list,
        "query_id": figure_id
    }
    return render(request, "app1/data_from_DB.html", context)

3. 模板层展示查询结果

在app1/data_from_DB.html里按需渲染结果,处理空查询、无匹配结果的场景:

<div>
    {% if figures_list %}
        <h3>查询结果</h3>
        <ul>
            {% for figure in figures_list %}
            <li>
                *ID:{{ figure.id }}*
                <br>名称:{{ figure.figure_name }}
                <!-- 其他字段替换成你Figure模型里定义的实际字段名即可 -->
            </li>
            {% endfor %}
        </ul>
    {% elif query_id %}
        <p>未找到ID为 *{{ query_id }}* 对应的figure信息</p>
    {% else %}
        <p>请输入ID后提交查询</p>
    {% endif %}
</div>

补充说明

  • 你当前用GET方法提交查询请求是合理的,查询类请求适合用GET,参数会拼接在URL上,方便分享查询结果。如果后续改成POST提交,记得在form标签内加{% csrf_token %}标签,否则Django会报403跨站请求伪造错误。
  • 不要直接把用户输入的内容传给ORM查询,必须做类型校验,否则用户输入非数字内容时,ORM会抛出字段类型不匹配的异常。
  • 如果ID是模型主键,用get_object_or_404比filter更适合单条查询场景,不用自己处理查询结果为空的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:39:16