2013-12-17 77 views
0

我有一個名稱,城市和州名的學校名單(1000年)。
有名稱,城市和州輸入字段。
我想按名稱搜索學校。如果他們離開城市或國家輸入空的我想在任何城市,任何州進行搜索。如果他們進入城市(留下狀態空白),然後按名稱和城市搜索。等等。SQLAlchemy燒瓶,匹配部分或全部

底線:使用可用的數據進行搜索,其他所有數據都是「any」。

除了寫出所有可能的組合之外,還有一種快速的方法可以做到嗎?

回答

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) 
+0

這非常聰明。 – Johnston