Flask WTF 验证第一次提交时为假,第二次为真
Flask WTF validation False on first submit, True on second
我在 Flask-wtforms 中使用以下代码。我尝试过在 SelectField 中使用和不使用各种验证器,但在用户第一次提交表单验证 returns false 时。
我也尝试删除额外的验证方法,但仍然在 SelectField 中留下一个验证器并再次验证 returns 第一次提交时为假。
本质上我想知道 SelectField 是否未设置为值 -1(即已由视图方法填充并且大概用户对当前活动的项目感到满意)。我不确定为什么表单在第二次提交时有效,即使在表单上没有选择任何其他内容
forms.py
something = SelectField(label = 'Something', choices = [('-1','Select Something')], default=('-1','Select Something'), id='select_something', validators=[validators.DataRequired(message='Nothing selected')])
#NB the line below with no validator also prints "--validate() returned false"
#something = SelectField(label = 'Something', choices = [('-1','Select Something')], default=('-1','Select Something'), id='select_something')
submit = SubmitField('Submit')
def validate(self):
rv = Form.validate(self)
if not rv:
print("--validate() returned false")
return False
#the line below never fired, see fix in following line
#if self.something.data == -1:
if str(self.something.data) == '-1':
logger.debug("--validate() data==-1")
return False
return True
view.py
form = Something(request.form)
if request.method == 'GET':
#get tuple_list from database
...
form.something.choices = tuple_list
form.something.default = tuple_list[0]
if request.method == 'POST' and form.validate():
print('Something added.')
我在每个选择元组的第一部分使用字符串而不是整数(即应该是 (1, 'text'))并且没有正确设置默认值(只需设置默认值 = n,其中 n = 整数) .
请注意此处的 form.process() 调用:How do you set a default value for a WTForms SelectField?
以下修正:
views.py
form = Something(request.form)
#get tuple_list from database
...
form.something.choices = tuple_list
form.something.default = tuple_list[0][0] #integer id value
form.process()
if request.method == 'POST' and form.validate():
return self.render_template('it_works.html')
return self.render_template('select_something.html')
forms.py
#no validator used here
something = SelectField(label = 'Something', choices = [], id='select_something')
submit = SubmitField('Submit')
def validate(self):
if len(self.something.choices) == 0:
return False
return True
我在 Flask-wtforms 中使用以下代码。我尝试过在 SelectField 中使用和不使用各种验证器,但在用户第一次提交表单验证 returns false 时。
我也尝试删除额外的验证方法,但仍然在 SelectField 中留下一个验证器并再次验证 returns 第一次提交时为假。
本质上我想知道 SelectField 是否未设置为值 -1(即已由视图方法填充并且大概用户对当前活动的项目感到满意)。我不确定为什么表单在第二次提交时有效,即使在表单上没有选择任何其他内容
forms.py
something = SelectField(label = 'Something', choices = [('-1','Select Something')], default=('-1','Select Something'), id='select_something', validators=[validators.DataRequired(message='Nothing selected')])
#NB the line below with no validator also prints "--validate() returned false"
#something = SelectField(label = 'Something', choices = [('-1','Select Something')], default=('-1','Select Something'), id='select_something')
submit = SubmitField('Submit')
def validate(self):
rv = Form.validate(self)
if not rv:
print("--validate() returned false")
return False
#the line below never fired, see fix in following line
#if self.something.data == -1:
if str(self.something.data) == '-1':
logger.debug("--validate() data==-1")
return False
return True
view.py
form = Something(request.form)
if request.method == 'GET':
#get tuple_list from database
...
form.something.choices = tuple_list
form.something.default = tuple_list[0]
if request.method == 'POST' and form.validate():
print('Something added.')
我在每个选择元组的第一部分使用字符串而不是整数(即应该是 (1, 'text'))并且没有正确设置默认值(只需设置默认值 = n,其中 n = 整数) .
请注意此处的 form.process() 调用:How do you set a default value for a WTForms SelectField?
以下修正:
views.py
form = Something(request.form)
#get tuple_list from database
...
form.something.choices = tuple_list
form.something.default = tuple_list[0][0] #integer id value
form.process()
if request.method == 'POST' and form.validate():
return self.render_template('it_works.html')
return self.render_template('select_something.html')
forms.py
#no validator used here
something = SelectField(label = 'Something', choices = [], id='select_something')
submit = SubmitField('Submit')
def validate(self):
if len(self.something.choices) == 0:
return False
return True