Python 带有动态选项的wtforms SelectField始终返回“0”;无”;获取数据

Python 带有动态选项的wtforms SelectField始终返回“0”;无”;获取数据,python,flask,wtforms,flask-wtforms,wtforms-json,Python,Flask,Wtforms,Flask Wtforms,Wtforms Json,我是新来的。我必须向用户提供水果清单和每种水果的成本,如下所示 动态生成水果总数,并动态生成每个水果的价格 以下是我的声明 from flask.ext.wtf import Form class SelectForm(Form): def __init__(self, csrf_enabled=False, *args, **kwargs): super(SelectForm, self).__init__(csrf_enabled=csrf_enabled, *a

我是新来的。我必须向用户提供水果清单和每种水果的成本,如下所示

动态生成水果总数,并动态生成每个水果的价格

以下是我的声明

from flask.ext.wtf import Form 
class SelectForm(Form):
    def __init__(self, csrf_enabled=False, *args, **kwargs):
        super(SelectForm, self).__init__(csrf_enabled=csrf_enabled, *args, **kwargs)
    fruits_list = wtforms.FieldList(
            wtforms.SelectField('fruits',
                validators = [validators.Optional()]
                ),
            )
fruits_labels = wtforms.RadioField('Fruit',
            choices = [],
            )
模板包含以下代码:

{% for fruit in form.fruits_labels %}
<tr>
    <td>
        {{fruit}}
        {{fruit.label}}
    </td>
    <td>
        {% set fruitslist = form.fruits_list[loop.index0] %}
        {% if fruitslist.choices|length %}
        {{fruitslist(class='form-control')}}
        {% endif %}
    </td>
</tr>
{% endfor %}
即使我选择了一个值为30的水果3,我也不知道为什么选择的值显示为无。我还尝试在检索所选值之前显示所有选项,它正确显示了所有选项。我多次更改代码,但它始终显示“无”值。有人能告诉我可能是什么问题吗

如果你能给我举一些例子,那将非常有帮助。谢谢你的时间和帮助。

我解决了这个问题

用户提交表单后,我会正确地接收提交的值,但在populate\u fruits\u list()方法中,我会使用pop\u entry()从列表中删除元素,从而使列表变为空。一旦列表为空,我将再次向列表中添加元素。由于删除了列表元素,用户对此字段的选择将重置为“无”

解决方案:提交表单后,如果有任何字段是动态填充的,我们不应该从列表中删除条目,而是可以使用类似于arr[0]=value的索引重新分配值

i、 e.替换为以下声明

    arr.popentry()
    arr.append(value)

希望这些信息能对其他人有所帮助

- 斯拉文

form.fruits_list choices[ 0 ]:  [('0', '-select-'), (1, '1')]
form.fruits_list choices[ 1 ]:  [('0', '-select-'), (30, '30'), (17, '17'), (16, '16'), (15, '15'), (14, '14'), (7, '7'), (6, '6'), (5, '5'), (4, '4'), (3, '3'), (2, '2'), (1, '1')] 
form.fruits_list choices[ 2 ]:  [('0', '-select-'), (30, '30'), (29, '29'), (28, '28'), (19, '19'), (18, '18'), (13, '13'),  (3, '3'), (2, '2'), (1, '1')] 
form.fruits_list choices[ 3 ]:  [('0', '-select-'), (30, '30'), (29, '29'), (28, '28'),  (21, '21'), (20, '20'),  (12, '12'), (11, '11'), (10, '10'),  (2, '2'), (1, '1')] 
selection: None
    arr.popentry()
    arr.append(value)
    arr[i] = value  //where i is an index