我有一个订单,允许我的用户创建一个订单。一个顺序由多个(producetype, quantity)
元组组成。Producetype应该以<select>
形式呈现,而quantity可以只是一个输入。应该动态添加producetype的选项,因为这可能会更改。目前,我已经用纯html编写了这个
我想使用WTForm来实现这一点,因为WTForm确实简化了我的代码。但是,我不能这样做:
代码:
class OrderEntryForm(Form):
quantity = IntegerField('Quantity',
[validators.Required(), validators.NumberRange(min=1)])
# we will be dynamically adding choices
producetype = SelectField('Produce',
[validators.Required()],
choices=[])
class OrderForm(Form):
name = TextField('Crop', [validators.Length(min=3, max=60)])
due_date = DateField('Due Date', [validators.required()])
order_entries = FieldList(FormField(OrderEntryForm))
我有以下问题:
order_entries
字段动态添加选项?order = { name:hello, due_date:2014-06-18, order_entries:[ {producetype_id: 1, quantity: 2}, {producetype_id: 3, quantity: 4}] }
,如何用正确的OrderEntryForm
值填充我的OrderForm
?我的代码在这里可用:https://gist.github.com/vicngtor/f8c8f0519dbd6b3b6110
将
SubmitField
添加到您的收件人OrderForm
:然后从您的视图调用它,并使用
FieldList
的append_entry
方法:希望能有帮助!
对于其他被SelectFields+fieldlist困扰的人- 这就是我用
SelectFields
(inspire dbynsfyn55's answer)实现FieldList
的方法。这种方法基于JSON日期动态地向/home
路由呈现任意数量的SelectFields。路线(routes.py):
表单(forms.py):
模板(
home.html
):帮助程序方法(app.py):
数据(custom_metadata.json):
结果:
这取决于你的意思
如果您的意思是希望在渲染后将行项目添加到表单中。您必须使用DOM操作在客户端添加这些内容。WTForms有一个命名约定,用于处理表单字段上的索引。只是
name="<form-field)name>-<index>"
。如果您使用遵循此约定的javascript添加名称,WTForms将知道如何在后端处理它。如果您的意思是希望有一个动态选择列表,那么您可以在表单中的
FieldList
被实例化之后对其进行迭代。您可以分配choices
任何2元组的iterable。在下面的例子中,我直接分配它们,但它们也可以很容易地从存储器中检索出来。只需使用
obj
关键字参数将对象直接绑定到表单。WTForms足够聪明,可以根据对象的属性动态构建表单。上面的示例创建一个样本
Order
,并将其提供给obj
关键字。渲染时,将生成以下内容(未设置样式):相关问题 更多 >
编程相关推荐