Flask+SQLAlchemy 获取复选框表单数据更新用户prezenta字段方法问询
实现代码
你可以直接在Flask的视图函数中按照以下逻辑处理表单提交,以下是兼容你当前HTML写法的代码:
1. 基础兼容方案(无需修改现有HTML)
首先导入必要依赖:
from flask import request, render_template, redirect from 你的应用启动文件 import db from 你的模型文件 import Users
视图函数示例:
# 替换为你实际的页面路由 @app.route('/attendance', methods=['GET', 'POST']) def attendance_page(): # GET请求渲染人员列表 if request.method == 'GET': all_users = Users.query.all() return render_template('你的模板文件名.html', Users=all_users) # POST请求处理勾选提交 if request.method == 'POST': # 遍历所有提交的表单字段 for form_key in request.form: # 跳过提交按钮的字段 if form_key == 'submit': continue # 表单键为用户ID,转成整型后查询用户 target_user = Users.query.get(int(form_key)) if target_user: # 兼容prezenta为空的情况,避免报错 target_user.prezenta = (target_user.prezenta or 0) + 1 # 提交所有修改到数据库 db.session.commit() # 重定向到当前页避免刷新重复提交 return redirect(request.url)
2. 优化方案(更易维护,推荐)
你可以稍微修改HTML的复选框写法,避免后续表单加其他字段时冲突:
<!-- 把原来的复选框改成固定name,用户ID存在value属性 --> <input type="checkbox" name="selected_user" value="{{ user.id }}" />
对应的Python处理逻辑更简洁:
if request.method == 'POST': # 直接获取所有勾选的用户ID列表 selected_ids = request.form.getlist('selected_user') for uid in selected_ids: target_user = Users.query.get(int(uid)) if target_user: target_user.prezenta = (target_user.prezenta or 0) + 1 db.session.commit() return redirect(request.url)
注意事项
- 如果你的表单
action属性留空,确保当前页面的路由绑定的就是上述处理视图即可正常提交 - 重定向操作是为了避免用户刷新页面时重复触发表单提交,多次累加计数
(target_user.prezenta or 0)的写法可以处理数据库中prezenta字段为NULL的情况,不会抛出类型错误
内容的提问来源于stack exchange,提问作者user13745525
相关产品推荐
相关产品推荐

