2017-01-02 140 views
1

我很难在提交的Flask应用程序的WTForms页面中获取当前选定的项目。 form.tableselector.data值在提交时总是等于1,无论SelectField中的哪个项目被选中(并且所有选项都具有从表格1-10(1,'table_name')的唯一表格ID,其中1是。一个整数Flask WTForms SelectField获取当前选择的项目

这里是当前的代码:

views.py

from flask import session 

def view(self): 
    form = Tableset(request.form) 
    if request.method == 'POST' and form.validate(): 
     #form.tableselector.data always returns 1 no matter which item is selected? 
     session['table_id'] = form.tableselector.data 

form.py

class MyBaseForm(Form): 
    #see https://wtforms.readthedocs.io/en/latest/csrf.html 
    class Meta: 
     csrf = True 
     csrf_class = SessionCSRF 
     csrf_secret = app.config.get('SECRET_KEY') 

     @property 
     def csrf_context(self): 
      return session 

class Tableset(MyBaseForm): 
    tableselector = SelectField(label = 'Table', choices = [], coerce=int, id='select_table') 
    submit = SubmitField('Submit') 

    def validate(self): 
     if len(self.tableselector.choices) == 0: 
      return False 
     return True 

tableview.html

<form role="form" action="{{ url_for('app.table_view') }}" method="post"> 
    {{ form.csrf_token }} 
    <div class="form-group"> 
    {{ form.tableselector.label }} 
    {{ form.tableselector }} 
    </div> 

我注意到,在窗体调试时,wtf Meta对象的csrf属性等于True,所以我知道CSRF正在工作。

回答

相关问题