根据其他表单中的用户输入删除 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 对象)
    • 或在数据库中,如果这在您的上下文中有意义

此外,请包含此函数的完整代码 - 不清楚您是如何创建您使用的那些表单的。