我有一份名单,城市和州的学校名单(1000)。
有名称,城市和州输入字段
我想按名字搜索学校。如果他们将城市或州的输入留空,我想搜索任何城市,任何州。如果他们进入城市(留空状态),则按名称和城市搜索。等等。
底线:使用可用数据进行搜索,其他所有内容均为“任意”。
除了编写所有可能的组合之外,还有一种快速的方法吗?
答案 0 :(得分:3)
我写的就好像你正在使用Flask-SQLAlchemy和WTForms。
...
schools = School.query
if form.name.data:
schools = schools.filter(School.name == form.name.data)
if form.city.data:
schools = schools.filter(School.city == form.city.data)
if form.state.data:
schools = schools.filter(School.state == form.state.data)
# at this point schools is a query filtered with whatever was given
...
这只是一个例子,改写它,使用除了相等之外的过滤器等。我有这样的“过滤器表单”,并且会在表单query()
和filter(query)
上添加额外的方法。然后可以在视图中这样调用它们:
form = FilterForm(request.args) # use get for filtering
schools = form.query()
if form.validate():
schools = form.filter(schools)
return render_template('schools.html', form=form, schools=schools)