目前我正在尝试创建一个用户可以创建闪存卡的表单,并且没有一定数量的闪存卡 - 您可以添加或删除它们。
我尝试使用FieldList
FormFields
,其中FormField
是闪存卡的表单。但是,我不完全理解这是如何工作的(文档不是很有帮助),并且无法创建FormFields
的变量数。
此外,我尝试循环遍历for
循环并在每次迭代时创建一个新的FormField
,但是有了这个,我似乎无法单独访问每个字段的数据(我只获得第一个字段的数据) )。
如果有人可以为这些方法或新方法提供修复,我将不胜感激。
答案 0 :(得分:0)
我假设每张闪存卡都有一个标题和一些内容。在这种情况下最有意义的表单字段类型是来自WTForms的TextField
&{39}和TextAreaField
。由于您正在使用Flask-WTForms,因此您需要继承基础Form
对象。
from flask.ext.wtf import Form
from wtforms import TextField, TextAreaField
class FlashCard(Form):
title = TextField('Card title:')
content = TextAreaField('Card content:')
在Flask视图功能中调用它时:
@app.route('/')
def index():
my_form = FlashCard()
if my_form.validate_on_submit:
# save flash card data here.
return render_template('index.html', my_form=my_form)
如果我是你,我会使用模态作为表格。 Bootstrap有一个非常容易使用的模式(需要Javascript)。当用户想要添加闪存卡时,另一个选项是重定向到表单页面。
重点是您可以为所有闪存卡使用相同的表单实例。希望这可以帮助。
如果你真的需要"动态表单组合"它是这样的(from wtforms doc's):
def my_view():
class F(MyBaseForm):
pass
F.username = StringField('username')
for name in iterate_some_model_dynamically():
setattr(F, name, StringField(name.title()))
form = F(request.POST, ...)
# do view stuff