You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌套在FieldList中的SelectField渲染时丢失choices参数问题

解决Flask-WTF中FieldList嵌套SelectField丢失choices的问题

问题原因

手动创建InvoiceLineForm实例并设置choices后通过append_entry添加到FieldList时,Flask-WTF内部的表单绑定机制未正确保留这些配置,导致渲染时选择框为空。

修复方案

不要手动创建子表单实例,而是通过FieldList.append_entry()获取自动生成的子表单对象,直接在该对象上设置choices。修改后的视图代码如下:

def update_invoice(inv_id):
    invoice = Invoice.get_by_id(inv_id)

    form = InvoiceForm()

    if request.method == 'GET':
        cus_dict = function()
        form.cus_id.choices = [item for item in cus_dict.items()]
        form.cus_id.default = invoice.cus_id
        form.process()

        for line_item in invoice.line_items:
            # 添加空的子表单条目并获取引用
            entry = form.line_forms.append_entry()
            # 直接给子表单设置choices
            entry.prod_id.choices = [(-1,'---'), (-2, '+++')]
            # 可选:设置默认选中值
            entry.prod_id.data = line_item.prod_id

    return render_template('invoice_create.html', form = form)

补充说明

  • 手动创建子表单再添加会绕开FieldList的内部绑定逻辑,导致choices配置无法传递到渲染阶段。
  • 批量初始化子表单数据时,直接操作append_entry()返回的对象即可,无需单独创建表单实例。

内容的提问来源于stack exchange,提问作者Artem Lebedev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 14:58:35