2016-12-15 30 views
0

使用WTForms,SQLAlchemy我試圖讓用戶從下拉列表中選擇一個國家關鍵字,並從該選項中通過座標(西,南,東,北)那個國家回到了這個計劃。根據用戶選擇從列中獲取值

由於choices=GeoKeywords.label通過國家罰款,一直堅持如何做到這一點。選擇「阿爾巴尼亞」通過值「阿爾巴尼亞」。但是,我怎麼能根據這個選擇帶入西部,南部,東部和北部呢?

數據庫表:

enter image description here

GP_DD_GEOKEYWORDS= Table('GP_DD_GEOKEYWORDS', Base.metadata, 
       Column('VALUE', String(75)), 
       Column('LABEL', String(75)), 
        Column('WEST', String(50)), 
        Column('SOUTH', String(50)), 
        Column('NORTH', String(50)), 
        Column('EAST', String(50))) 

class GeoKeywords(): 
s = select([GP_DD_GEOKEYWORDS.c.VALUE, GP_DD_GEOKEYWORDS.c.LABEL]) 
result = connection.execute(s) 
label = [row for row in result] 

class ReusableForm(Form): 
    region = SelectField('Geographic Keyword:', choices=GeoKeywords.label) 

@app.route("/editorother", methods=['GET', 'POST']) 
@login_required 
def editorother(): 
    form = ReusableForm(request.form) 
    if request.method == 'POST': 
     region = request.form['region'] 

     if form.validate(): 
     "Do stuff with region and coordinates" 

回答

1

您需要創建另一個查詢返回的北,東,南,併爲選定的區域WEST列。

... 
if form.validate(): 
    coords_query = select([GP_DD_GEOKEYWORDS.c.NORTH, 
          GP_DD_GEOKEYWORDS.c.EAST, 
          GP_DD_GEOKEYWORDS.c.SOUTH, 
          GP_DD_GEOKEYWORDS.c.WEST]) 
        .where(GP_DD_GEOKEYWORDS.c.LABEL == region) 
    result = connection.execute(coords_query) 
    # result will be a list of matching rows with coordinates arranged in a tuple taking the same order as the 'select' statement 
    # e.g. (NORTH, EAST, SOUTH, WEST) 
... 
+0

我得到一個未解決的引用.where如何實現這一點? – Infinity8

0

@shiv答案是非常接近,讓我在正確的方向,我將其標記爲答案,雖然你將需要編輯.where位置。最後這個工作:

class Coodinator: 
    def coordinates_query(self): 
     self.coords_select = select([GP_DD_GEOKEYWORDS.c.WEST, 
           GP_DD_GEOKEYWORDS.c.SOUTH, GP_DD_GEOKEYWORDS.c.EAST, 
           GP_DD_GEOKEYWORDS.c.NORTH]) 

     self.coords_select = self.coords_select.where(GP_DD_GEOKEYWORDS.c.LABEL == region) 
     self.coords_row = connection.execute(self.coords_select) 

       for row in self.coords_row: 
        self.coords_row = dict(row) 

     def coordinates_west(self): 
       return self.coords_row['WEST']