Zhihu で見られる質問: Python フラスコの wtforms は可変長フォームを処理できますか?
問題の説明
form中的元素会变多。 比如有一个表格: 我喜欢的东西: 可以增加任意个物品(这几个物品填在不同的框),然后提交。 实现这个需求,需要用到FieldList
簡単な例:
from wtforms import Form from wtforms.fields import FieldList, StringField class MyForm(Form): names = FieldList(StringField('名称'), label='物品列表', min_entries=1)
フォームデータを送信:
names-0=苹果 names-1=梨 names-2=香蕉
jsonデータを送信:
{"names": ["苹果", "梨", "香蕉"]}
出力結果の表示:
print(form.names.data) # ['苹果', '梨', '香蕉']
以下はより複雑な例です:
from wtforms import Form from wtforms.fields import FieldList, FormField, StringField, IntegerField class ProductForm(Form): name = StringField('名称') count = IntegerField('数量') class MyForm(Form): products = FieldList(FormField(ProductForm), label='产品列表', min_entries=1)
フォームデータを送信:
products-0-name=Iphone6 products-0-count=1 products-1-name=小米手机 products-1-count=2
json データを送信します:
{"products": [{"name": "Iphone6", "count": 1}, {"name": "小米手机", "count": 2}]}
出力結果は次のように表示されます:
print(form.products.data) # [{'name': 'Iphone6', 'count': 1}, {'name': '小米手机', 'count': 2}]
そこで質問は、ダイナミクスの鍵は何でしょうか?
そうです、表示されているフィールド名の0から始まる番号です
項目を追加したい場合はどうすればよいですか?
最大の数プラス 1、それです!
HTML の js コードはダイナミクスを実現するための鍵です。ここでは、Python 部分のみに焦点を当てます。