有没有办法从 html 模板中动态设置 wtform 单选字段的默认值



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

WTFoform字段

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>

感谢您的任何帮助

如果要

使用表单编辑数据库中已有的数据,则应在创建时在视图函数中将此数据提供给表单。这将使您能够保持模板简单且可重用。数据库中的数据可以作为对象或字典 https://wtforms.readthedocs.io/en/stable/forms.html 传递到表单。如果您的表单直接映射到数据库表,则可以不加修改地从查询中传递此内容。在下面的代码中,我按照您的示例创建了一个新字典,以根据 field_1 的值设置 radio_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():
        # .....