根据其他表单中的用户输入删除 FlaskForm 字段
Deleting FlaskForm Fields depending on userinput in other forms
我有 3 个带有复选框的表单来配置所需的表单 (Final_Form)。用户选择所需的字段(在 form1、form2 和 form3 中)后,我想删除最终表单中不需要的所有字段并呈现最终表单。这样做的原因是,我有 3 个子类别,大约有 12 个可能的值,在每种形式 (form1-form3) 中,用户可以选择一个或多个子类别。子类别是标准化的,用于描述临床事件。用户希望将子类别 (1-3; form1-form3) 分开并始终带有示例(屏幕右侧的花药 bootstrap 列)。
最终形式不是最能描述临床事件的子类别的组合。 Final_Form 中的所有字段都是 TextAreaFields。 TextAreaFields 的输入存储在 sqlite-db 中。
我是这样尝试的:
app.py:
if request.method == 'POST' and form1.form1Submit.data:
OnePointOne = form1.OnePointOne.data
if not OnePointOne:
del Final_Form.OnePointOne
return render_template('Form2.html', form2 = form2)
if request.method == 'POST' and form2.form2Submit.data:
TwoPointTwo = form2.TwoPointTwo.data
if not TwoPointTwo:
del Final_Form.TwoPointTwo
return render_template('Form3.html', form3 = form3)
if request.method == 'POST' and form3.form3Submit.data:
ThreePointThree = form3.ThreePointThree.data
if not ThreePointThree:
del Final_Form.ThreePointThree
return render_template('Final.html', Final_Form = Final_Form)
forms.py:
class form1(FlaskForm):
OnePointOne = BooleanField('Effect')
form1Submit = SubmitField('Submit Category')
class form2(FlaskForm):
TwoPointTwo = BooleanField('Measure')
form2Submit = SubmitField('Submit Category')
class form3(FlaskForm):
ThreePointThree = BooleanField('Result')
form3Submit = SubmitField('Submit Category')
class Final_Form(FlaskForm):
OnePointOne = TextAreaField('Example Effect')
TwoPointTwo = TextAreaField('Example Measure')
ThreePointThree = TextAreaField('Example Result')
Final_FormSubmit = SubmitField('Submit incident')
问题是,Final_Form 对象的表单域不会被删除(仅在 if 语句内)。我非常感谢每一个提示或解释。
由于您显示的是三个单独的页面,因此存在三个单独的请求。
您 Final_Form 对象不能简单地保留在这些请求之间。
我不完全理解你为什么要这样配置你的第三种形式,解释你的用例以获得更好的建议会很有帮助。
在没有更多信息的情况下,我正在考虑一些方法来做到这一点:
- 你把它做成一个 page/request,你使用 AJAX 从一个表格到另一个表格。
- 你把它做成一个页面,所有的形式,用JS控制可视化+ CSS
- 您将所需的值保存在某处
- 也许你可以把它保存在 cookie 中(
session
对象)
- 或在数据库中,如果这在您的上下文中有意义
此外,请包含此函数的完整代码 - 不清楚您是如何创建您使用的那些表单的。
我有 3 个带有复选框的表单来配置所需的表单 (Final_Form)。用户选择所需的字段(在 form1、form2 和 form3 中)后,我想删除最终表单中不需要的所有字段并呈现最终表单。这样做的原因是,我有 3 个子类别,大约有 12 个可能的值,在每种形式 (form1-form3) 中,用户可以选择一个或多个子类别。子类别是标准化的,用于描述临床事件。用户希望将子类别 (1-3; form1-form3) 分开并始终带有示例(屏幕右侧的花药 bootstrap 列)。 最终形式不是最能描述临床事件的子类别的组合。 Final_Form 中的所有字段都是 TextAreaFields。 TextAreaFields 的输入存储在 sqlite-db 中。
我是这样尝试的:
app.py:
if request.method == 'POST' and form1.form1Submit.data:
OnePointOne = form1.OnePointOne.data
if not OnePointOne:
del Final_Form.OnePointOne
return render_template('Form2.html', form2 = form2)
if request.method == 'POST' and form2.form2Submit.data:
TwoPointTwo = form2.TwoPointTwo.data
if not TwoPointTwo:
del Final_Form.TwoPointTwo
return render_template('Form3.html', form3 = form3)
if request.method == 'POST' and form3.form3Submit.data:
ThreePointThree = form3.ThreePointThree.data
if not ThreePointThree:
del Final_Form.ThreePointThree
return render_template('Final.html', Final_Form = Final_Form)
forms.py:
class form1(FlaskForm):
OnePointOne = BooleanField('Effect')
form1Submit = SubmitField('Submit Category')
class form2(FlaskForm):
TwoPointTwo = BooleanField('Measure')
form2Submit = SubmitField('Submit Category')
class form3(FlaskForm):
ThreePointThree = BooleanField('Result')
form3Submit = SubmitField('Submit Category')
class Final_Form(FlaskForm):
OnePointOne = TextAreaField('Example Effect')
TwoPointTwo = TextAreaField('Example Measure')
ThreePointThree = TextAreaField('Example Result')
Final_FormSubmit = SubmitField('Submit incident')
问题是,Final_Form 对象的表单域不会被删除(仅在 if 语句内)。我非常感谢每一个提示或解释。
由于您显示的是三个单独的页面,因此存在三个单独的请求。 您 Final_Form 对象不能简单地保留在这些请求之间。
我不完全理解你为什么要这样配置你的第三种形式,解释你的用例以获得更好的建议会很有帮助。
在没有更多信息的情况下,我正在考虑一些方法来做到这一点:
- 你把它做成一个 page/request,你使用 AJAX 从一个表格到另一个表格。
- 你把它做成一个页面,所有的形式,用JS控制可视化+ CSS
- 您将所需的值保存在某处
- 也许你可以把它保存在 cookie 中(
session
对象) - 或在数据库中,如果这在您的上下文中有意义
- 也许你可以把它保存在 cookie 中(
此外,请包含此函数的完整代码 - 不清楚您是如何创建您使用的那些表单的。