Flask+SQLAlchemy CRUD应用:无结束日期时的日期过滤实现
解决方案:Flask日期筛选逻辑修正
核心逻辑修正(app.py)
你需要在获取日期参数后添加判断逻辑,处理结束日期为空的场景,同时补充边界情况避免查询报错。修改后的代码如下:
@app.route('/', methods=['GET', 'POST']) def index(): # 获取前端传入的日期参数,未输入时返回None search_date_start = request.args.get('start_date_filter') search_date_end = request.args.get('end_date_filter') # 处理结束日期为空的情况:自动设为远期日期 if not search_date_end: search_date_end = '2050-01-01' # 构建查询:若有开始日期则按区间筛选,否则查询所有记录 query = appts_db.query.order_by(appts_db.pickup_date) if search_date_start: query = query.filter(appts_db.pickup_date.between(search_date_start, search_date_end)) appts = query.all() return render_template('index.html', appts=appts)
逻辑说明:
if not search_date_end:覆盖了用户未输入结束日期、或传入空字符串的所有情况,统一替换为预设的2050-01-01- 增加了对
search_date_start为空的处理:如果用户未输入开始日期,直接返回所有按日期排序的预约记录,避免between操作因参数缺失触发数据库错误 - 拆分查询构建步骤,让代码结构更清晰,后续扩展筛选条件也更方便
前端提示优化(可选,index.html)
为了让用户更清楚留空结束日期的作用,可以在表单中补充提示文字:
<label for="end_date_filter">Choose an end date (leave blank for all future appointments):</label> <input type="date" id="end_date_filter" name="end_date_filter" min="2022-01-01"><br>
内容的提问来源于stack exchange,提问作者Brandon
相关产品推荐
相关产品推荐

