我已经用下面的代码动态创建了一个Flask-WTF表单。我尝试在从selectfield中选择某个值之后动态地执行此操作。也就是说,从第一个selectfield中选择一个值,从db中获取项目列表,然后创建代码中的字段,而不需要重新加载页面
应用程序:
class SpecificsForm(FlaskForm):
itemSpecific_id = StringField('itemSpecific_id')
itemSpecific = StringField(label='Item Specific', validators=[DataRequired()])
class ListingForm(FlaskForm):
itemBrand = SelectField(label='Brand:', validators=[DataRequired()])
itemSpecifics = FieldList(FormField(SpecificsForm))
@app.route('/index', methods=['GET', 'POST'])
def index():
itemSpecifics = ['Style:', 'Type:', 'Width:', 'Height:']
class LocalForm(ListingForm):
pass
totalFields = len(itemSpecifics)
LocalForm.itemSpecifics = FieldList(FormField(SpecificsForm), min_entries=totalFields)
listingForm = LocalForm()
return render_template('index.html', listingForm=listingForm, itemSpecifics=itemSpecifics)
索引.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post" role="form">
{{ listingForm.hidden_tag() }}
<p>
{{ listingForm.itemBrand.label }}
</p>
<p>
{{ listingForm.itemBrand() }}
</p>
{% for l in listingForm.itemSpecifics %}
<p>
{{ itemSpecifics[loop.index0] }}
</p>
<p>
{{ l.form.itemSpecific }}
</p>
{% endfor %}
<input type="submit" value="Submit!" />
</form>
</body>
</html>
如果我在“render\u template”之前添加了下面的内容,则按submit按钮时,将添加额外的字段(颜色),而不清除现有值。用ajax从一个按钮发送post请求不会做同样的事情,为什么提交表单会导致页面“更新”
if request.method == 'POST':
itemSpecifics = ['Style:', 'Type:', 'Width:', 'Height:', 'Colour:']
class LocalForm(ListingForm):
pass
totalFields = len(itemSpecifics)
LocalForm.itemSpecifics = FieldList(FormField(SpecificsForm), min_entries=totalFields)
listingForm = LocalForm()
我已经在论坛上搜寻了几天,寻找一个我能理解的足够简单的解决方案,但我发现了许多变化,只是不知道适合我的要求的最佳方法。我考虑过只隐藏额外的字段并按要求显示它们,但不确定如何知道哪个是哪个,因为所选项目之间的顺序并不总是相同的
希望这是有意义的,并提前感谢任何援助
目前没有回答
相关问题 更多 >
编程相关推荐