WtfFroms Pre poulate ListField

时间:2016-12-08 10:33:29

标签: python flask wtforms flask-wtforms

我想在渲染tamplete之前填充数据到列表字段。 这就是我到目前为止所做的。

class SizeVariationForm(Form):
    name = TextField("name")
    sku = TextField("SKU Number")


class AddVariationForm(NewListingForm):
    item_list = FieldList(FormField(SizeVariationForm))
    add_field = SubmitField('Add Variations')


@app.route('/index', methods=['GET', 'POST'])
def add_inputs():
    form = AddVariationForm(request.form)
    if form.add_field.data:
        # what i want is to poluate sku data here

        new_variation = form.item_list.append_entry()
        return render_template('index')

目前的结果是

<input id="item_list-0-variation"  value="">

期望的结果是

<input id="item_list-0-variation" value="Some Value here">

2 个答案:

答案 0 :(得分:1)

你会得到预期的输出,但我不确定这是你想要的。

class SizeVariationForm(Form):
    name = TextField("Name")
    sku = TextField("SKU")

class TestForm(Form):
    item_list = FieldList(FormField(SizeVariationForm))
    add_field = SubmitField("Add Variations")

@app.route('/index', methods=['GET', 'POST'])
def add_inputs():
    f = SizeVariationForm()
    form = AddVariationForm()
    if request.method == 'POST':
        f.name.data = "Same value"
        f.sku.data = "sku data"
        form.item_list.append_entry(f)
    return render_template('index.html', form=form)

#index.html
<form method="POST", action="/">
        {{form.item_list}}
        {{form.add_field.label}}{{form.add_field}}
</form>

答案 1 :(得分:1)

基类Field接受default参数。

  

default - 如果未提供表单或对象输入,则指定给字段的默认值。可能是可赎回的。

将此参数提供给字段的init方法。 IE

class MyForm(Form):
    foo = SomeField("Bar", default="Example")

http://wtforms.simplecodes.com/docs/0.6.1/fields.html