有没有办法从html模板中动态设置wtform无线电场的默认值?

时间:2019-04-18 04:26:49

标签: python flask jinja2 wtforms

我正在尝试在HTML模板中动态设置单选字段的值,但不确定如何设置默认选择。我要这样做是因为我要使用的表单是可以保存并在需要时重新编辑的表单,因此我希望默认值是先前保存/提交时设置的值。

wtform字段

field_1 = StringField('field_1')
radio_1 = RadioField('radio_1', choices=[(1,'Yes'),(2,'No')])

我想做的是这样的:

数据是数据库数据

{% if data.field_1 = 'X' %}
    {{ form.radio_1(id="radio_1",class="ff-style-radio",default=1) }}
{% else %}
    {{ form.radio_1(id="radio_1",class="ff-style-radio",default=2) }} 
{% endif %}

尝试此方法没有成功,将默认值替换为值,等等。是否可能这样?如果没有,我将如何分隔wtform无线字段选择,以便可以手动标记选中的选项?还是应该只使用基本的HTML方法并执行以下操作:

<ul class="ff-style-radio" id="radio_1">
    <li>
        {% if data.field_1 = 'X' %}
            <input id="radio_1-0" name="radio_1" type="radio" value="Yes" checked> 
        {% else %}
            <input id="radio_1-0" name="radio_1" type="radio" value="Yes"> 
        {% endif %}        
        <label for="radio_1-0">Yes</label>
   </li>
    <li>
        {% if data.field_1 = 'X' %}
            <input id="radio_1-1" name="radio_1" type="radio" value="No"> 
        {% else %}
            <input id="radio_1-1" name="radio_1" type="radio" value="No" checked> 
        {% endif %} 
        <label for="radio_1-1">No</label>
    </li>
</ul>

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

如果要使用表单来编辑数据库中已有的数据,则应在创建时在视图功能中将此数据提供给表单。这将使您的模板简单易用。来自数据库的数据既可以作为对象也可以作为字典https://wtforms.readthedocs.io/en/stable/forms.html传递给表单。如果您的表单直接映射到数据库表,则只需在查询中传递未修改的表单即可。在下面的代码中,我按照您的示例创建了一个新字典,根据radio_1的值来设置field_1的值。

@app.route("/myurl")
def myview():
    # do database lookup here
    olddata = {"radio_1": 1 if data.field_1 == "X" else 2}
    form = Myform(formdata=request.form, data=olddata)
    if request.method == "POST" and form.validate():
        # .....