flask - 在搜索期间将 SQLAlchemy 表列传递给 Flask 路由
问题描述
总的来说,我对 Flask 和 Web 开发相当陌生,并且正在努力弄清楚如何设置任意列搜索。
我的表格:
class SearchForm(FlaskForm):
choices = [('facilityid', 'facilityid'),
('facilityname', 'facilityname'),
('networkid', 'networkid'),
('contractid', 'contractid'),
('address', 'address')]
select = SelectField('Search for something', choices=choices)
id_search = StringField('')
submit = SubmitField('Search')
我的路线:
@app.route('/results')
def results(search):
search_string = search.data['id_search']
search_field = search.data['select']
# TODO: Remove redundant code
if search_string == '':
query = FGymNetworkFacilities.query.order_by(func.rand()).offset(20).limit(10).all()
table = FacilityTable(query)
table.border = True
elif search_field == 'address' and search_field != '':
query = FGymNetworkFacilities.query.filter(FGymNetworkFacilities.address.like(f'%{search_string}%')).all()
table = FacilityTable(query)
table.border = True
if not results:
flash('no results!')
return redirect('/')
return render_template('facilities.html', table=table)
这个表模型有大约 80 列,我不想做 80 条if/else
语句。我需要找到一种将列名传递给行的方法(在本例中address
)
query = FGymNetworkFacilities.query.filter(FGymNetworkFacilities.address.like(f'%{search_string}%')).all()
但如果有更好的方法来做到这一点,我绝对愿意接受。不幸的是,考虑到这个项目的限制,我无法实现 Elastic Search,现在我不得不使用这种类型的搜索方法。
提前致谢。