Chi*_*Sql 18 python flask wtforms
我试图根据本文档在WTForms中生成具有动态字段的表单http://wtforms.simplecodes.com/docs/1.0.2/specific_problems.html#dynamic-form-composition
我有这个子表单类,允许用户从列表中选择要购买的项目:
class Item(Form):
itmid = SelectField('Item ID')
qty = IntegerField('Quantity')
class F(Form):
pass
Run Code Online (Sandbox Code Playgroud)
将有多个类别的购物项目,因此我想根据用户将选择的类别生成动态选择字段:
fld = FieldList(FormField(Item))
fld.append_entry()
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
AttributeError: 'UnboundField' object has no attribute 'append_entry'
Run Code Online (Sandbox Code Playgroud)
我做错了什么,或者在WTForms中没有办法做到这一点?
Mat*_*ier 10
我今晚遇到了这个问题并最终得到了这个.我希望这有助于未来的人民.
class RecipeForm(Form):
category = SelectField('Category', choices=[], coerce=int)
...
Run Code Online (Sandbox Code Playgroud)
@mod.route('/recipes/create', methods=['POST'])
def validateRecipe():
categories = [(c.id, c.name) for c in g.user.categories.order_by(Category.name).all()]
form = RecipeForm(request.form)
form.category.choices = categories
...
@mod.route('/recipes/create', methods=['GET'])
def createRecipe():
categories = [(c.id, c.name) for c in g.user.categories.order_by(Category.name).all()]
form = RecipeForm(request.form)
form.category.choices = categories
return render_template('recipes/createRecipe.html', form=form)
Run Code Online (Sandbox Code Playgroud)
我发现这篇文章也很有帮助
class BaseForm(Form):
@classmethod
def append_field(cls, name, field):
setattr(cls, name, field)
return cls
from forms import TestForm
form = TestForm.append_field("do_you_want_fries_with_that",BooleanField('fries'))(obj=db_populate_object)
Run Code Online (Sandbox Code Playgroud)
我为所有表单使用扩展类BaseForm,并在类上有一个方便的append_field函数.
返回附加了字段的类,因为(表单字段的)实例不能追加字段.
发布时无需编写完整代码或测试代码,但也许它会给你一些想法.这也许只能帮助填充所需的数据.
您需要填写choices的SelectField是能够看到的数据,并能选择它.你填的那个?初始填充应该在表单定义中,但是如果您喜欢动态表单,我建议您在创建此表单的位置对其进行修改以向用户显示.就像您执行某些操作的视图一样form = YourForm(),然后将其传递给模板.
如何用选择填写表单的选择字段?你必须有元组列表,然后像这样:
form.category_select.choices = [(key, categories[key]) for key in categories]
form.category_select.choices.insert(0, ("", "Some default value..."))
Run Code Online (Sandbox Code Playgroud)
categories 这里必须是包含您的类别的字典,如 {1:'One', 2:'Two',...}
因此,如果您在定义表单时将某些内容分配给它,那么它将从头开始具有该数据,并且您需要具有用户类别的位置,只需在视图中覆盖它.
希望能给你一些想法,你可以继续前进:)
| 归档时间: |
|
| 查看次数: |
22575 次 |
| 最近记录: |