显示基于选择Flask隐藏表单元素

时间:2018-02-22 04:10:04

标签: flask wtforms flask-wtforms

我为我的网络项目开发了一个烧瓶网页。我需要根据select元素中的User selection删除或取消激活一个文件上传元素。

class MyForm(FlaskForm):
    email = StringField('Email')
    fileBase = FileField('Base OBS file:')
    fileObsRover= FileField('Rover OBS file:')
    fileNavRover= FileField('Rover NAV file:')
    password = TextField('Name')
    textarea = IntegerField('Elevation mask angle')
    #radios = RadioField('Frequecies', default='option1', choices=[('option1', 'L1'), ('option2', 'L2'), ('option3', 'L1 and L2')])
    selects = SelectField('Positioning mode', choices=[('0', 'Single Point Positioning'), ('1', 'DGPS/DGNSS'), ('2', 'Kinematic'), ('3', 'Static Positioning')])

如果用户在渲染模板之前选择了定位模式作为单点定位,我想删除fileBase文件字段。

我读过一些关于Removing fields per instance的文章。但是我在为表单实现相同的代码时遇到了麻烦。任何建议都非常感谢。

我尝试使用以下代码

def edit_issue():
    if Myform.selects.data == 'Single Point Positioning':
        del MyForm.fileBase

但是当选择单点定位时模板不会删除

1 个答案:

答案 0 :(得分:0)

在呈现表单并将其发送到浏览器之前使用

Removing Fields Per-instance。看起来您希望在将字段发送到浏览器并且用户选择了特定选项后删除该字段,在这种情况下,您需要在浏览器中使用Javascript来操作表单。

不使用Javascript的替代方法是将表单处理拆分为两步。

定义三种形式如下:

class PositioningModeForm(FlaskForm):
    selects = SelectField('Positioning mode', choices=[('0', 'Single Point Positioning'), ('1', 'DGPS/DGNSS'), ('2', 'Kinematic'), ('3', 'Static Positioning')])

class SinglePointPositioningForm(FlaskForm):
    email = StringField('Email')
    fileObsRover= FileField('Rover OBS file:')
    fileNavRover= FileField('Rover NAV file:')
    password = TextField('Name')
    textarea = IntegerField('Elevation mask angle')

class OtherPointPositioningForm(SinglePointPositioningForm):
    selected_id = HiddenField()
    fileBase = FileField('Base OBS file:')

请注意,OtherPointPositioningForm继承自SinglePointPositioningForm,因此它包含所有必需的输入字段。 OtherPointPositioningForm还有一个隐藏字段来存储选定的定位模式。由于您清楚地知道定位模式,因此SinglePointPositioningForm中不需要此字段。

第1步。

向浏览器发送PositioningModeForm,询问用户他们想要使用哪种定位模式

第2步

处理表单并根据所选的定位模式在内部重定向到两条路线中的任何一条。一条路线呈现SinglePointPositioningForm,而另一条路线呈现OtherPointPositioningForm