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

Flask+MongoDB奖学金查询无结果 技术问题求助

奖学金搜索无结果的问题排查与解决

核心问题1:表单字段名与后端取值不匹配

前端表单里的输入框name属性都是小写开头(category、marks、state、qualification),但后端Flask代码里用的是大写开头的键去取值(request.form.get('Category')),这会导致后端获取到的Category、Marks、State、Qualification全为None。用这些None构建的查询条件,只会匹配MongoDB中对应字段为null的文档,自然查不到数据。

核心问题2:未过滤空查询条件

当某个字段没有有效输入时(比如因上述问题导致的None),你依然将其加入了search_conditions字典。例如'Category': None会让MongoDB只找Category字段为null的文档,而不是忽略这个条件进行搜索。

次要问题:数字输入的处理局限性

表单中Marks和Qualification是text类型,代码里用isdigit()判断是否为数字,但该方法无法识别带小数的数字(比如"85.5"),会被转为0,导致$lte:0的条件可能不符合实际需求。


修正后的代码示例

后端Flask路由修改

@app.route('/search_scholarships', methods=['GET', 'POST'])
def search_scholarships():
    if request.method == 'POST':
        # 键与前端表单name完全匹配(小写开头)
        category = request.form.get('category')
        marks_input = request.form.get('marks')
        state = request.form.get('state')
        qualification_input = request.form.get('qualification')

        # 处理数字输入,支持小数转整数(可根据需求调整为保留小数)
        try:
            marks = int(float(marks_input)) if marks_input else 0
        except ValueError:
            marks = 0
        
        try:
            qualification = int(float(qualification_input)) if qualification_input else 0
        except ValueError:
            qualification = 0

        # 只添加有有效值的查询条件
        search_conditions = {}
        if category:
            search_conditions['Category'] = category
        if state:
            search_conditions['State'] = state
        if marks > 0:
            search_conditions['Marks'] = {'$lte': marks}
        if qualification > 0:
            search_conditions['Qualification'] = {'$lte': qualification}

        # 执行查询
        scholarships_data = list(scholarships.find(search_conditions))
        print("Scholarships data:", scholarships_data)

        return render_template('results.html', results=scholarships_data)
    # GET请求返回搜索页面(原代码缺失此逻辑,直接访问路由会报错)
    return render_template('search.html')

前端表单优化(可选)

将Marks和Qualification的输入类型改为number,避免用户输入非数字内容:

<!DOCTYPE html>
<html>
<head>
    <title>Scholarship Search</title>
</head>
<body>
    <h1>Scholarship Search</h1>
    <form method="post" action="/search_scholarships">
        <label for="category">Category:</label>
        <input type="text" name="category" required>
        <br>
        <label for="marks">Marks:</label>
        <input type="number" name="marks" step="any" required>
        <br>
        <label for="state">State:</label>
        <input type="text" name="state" required>
        <br>
        <label for="qualification">Qualification:</label>
        <input type="number" name="qualification" required>
        <br>
        <input type="submit" value="Search Scholarships">
    </form>
</body>
</html>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:35:03