我正在开发一个CRUD Flask Web应用程序,它允许安排卡车约会。我能够创建,更新和删除约会,但我很难从数据库中检索特定的数据。
我想实现的是有三个复选框,每个复选框代表一种可以发货的物料。当用户选中一个或多个复选框并单击提交按钮时,我希望应用程序只在表中显示与所选物料对应的约会。
我通过修改app.py中的index()函数实现了过滤功能。下面的代码运行,但它一次只对一个选定的材料起作用:
@app.route('/', methods=['GET', 'POST'])
def index():
search_material = request.args.get('material_filter')
appts = appts_db.query.filter_by(material=search_material) \
.order_by(appts_db.pickup_date).all()
return render_template('index.html', appts=appts)
在index.html中,我有三个复选框和一个提交按钮:
<form action="/" method="GET">
<label>Select a material:</label><br>
<input type="checkbox" name="material_filter" id="HCl_filter" value="HCl">
<label for="HCl">HCl</label><br>
<input type="checkbox" name="material_filter" id="Caustic_filter" value="Caustic">
<label for="Caustic">Caustic</label><br>
<input type="checkbox" name="material_filter" id="Bleach_filter" value="Bleach">
<label for="Bleach">Bleach</label><br>
<input type="submit" value="Filter Appointments">
</form>
<h3>Appointment List:</h3>
<table>
<tr>
<th>Carrier</th>
<th>Material</th>
<th>Pickup Date [YYYY-MM-DD]</th>
</tr>
{% for appt in appts %}
<tr>
<td>{{ appt.carrier }}</td>
<td>{{ appt.material }}</td>
<td>{{ appt.pickup_date }}</td>
</tr>
{% endfor %}
</table>
需要进行哪些更改才能允许选择多个材质并在表格中显示这些材质?
1条答案
按热度按时间8yparm6h1#
需要做两个改变才能使其生效。
首先,
request.args.get
只会从表单数据中检索一个值。这通常是可以的,但如果表单有多个输入具有相同的name
属性,则不行。在这种情况下,我们必须使用request.args.getlist
以list
的形式获取所有值。其次,
filter_by
方法不能表示从同一属性的值列表中进行选择。在这种情况下,我们希望将.filter
与属性的.in_
方法结合使用。因此,路由应该如下所示: