嗨,我对python编程非常陌生。目前我正在开发一个使用flask的小应用程序,供用户提交数据。表单是动态生成的。我没有使用WTForms 这是生成表单
的HTML部分{% if message %}
{% for data in message %}
<tr>
<th><input type="text" name="matchnumber" value="{{data.get('matchno')}}" readonly></th>
<th>{{data.get('team1')}}</th>
<th>vs</th>
<th>{{data.get('team2')}}</th>
<th><select name="winner">
<option value="{{data.get('team1')}}">{{data.get('team1')}}</option>
<option value="{{data.get('team2')}}">{{data.get('team2')}}</option>
</select></th>
<th><input type="number" placeholder="Point" name="point" value="{{request.form.point }}" required min="500" max="1000"></th>
</tr>
{% endfor %}
{% endif %}
<table>
表单按预期生成。它至少有8列,它也可以更多地基于它从数据库接收的响应。 但是当我尝试接收表单数据时,真正的问题就出现了。我从表单中收到的数据将再次保存在数据库中 这是我试图处理响应的python部分
result=request.form
result2=result.to_dict(flat=False)
for key,value in result2.items():
print(key,value)
问题是第一行是给出一个ImmutableMultiDict数据而我无法迭代相同甚至在将其转换为正确的字典之后我无法正确提取每个字段 结果变量的输出为
ImmutableMultiDict([('matchnumber', '1'), ('matchnumber', '2'), ('matchnumber', '3'), ('matchnumber', '4'), ('matchnumber', '5'), ('matchnumber', '6'), ('matchnumber', '7'), ('matchnumber', '8'), ('winner', 'Russia'), ('winner', 'Egypt'), ('winner', 'Morocco'), ('winner', 'Portugal'), ('winner', 'France'), ('winner', 'Argentina'), ('winner', 'Peru'), ('winner', 'Croatia'), ('point', '800'), ('point', '800'), ('point', '800'), ('point', '800'), ('point', '800'), ('point', '800'), ('point', '800'), ('point', '800')])
将其转换为字典后,变量result2将其作为输出
{'matchnumber': ['1', '2', '3', '4', '5', '6', '7', '8'], 'winner': ['Russia', 'Egypt', 'Morocco', 'Portugal', 'France', 'Argentina', 'Peru', 'Croatia'], 'point': ['800', '800', '800', '800', '800', '800', '800', '800']}
当我迭代result2项时,这是生成的输出
matchnumber ['1', '2', '3', '4', '5', '6', '7', '8']
winner ['Russia', 'Egypt', 'Morocco', 'Portugal', 'France', 'Argentina', 'Peru', 'Croatia']
point ['800', '800', '800', '800', '800', '800', '800', '800']
我面临的确切问题是我无法同时迭代列表,我尝试googleing并找到如何从ImmutableMultiDic获取exactdata的解决方案,但我没有得到任何好结果 请任何人都可以建议我更好的方式从表单中获取数据。整个表单将是动态的,因为它将根据它将不断更新匹配列表的日期而改变。我没有使用任何ORM我只使用原始SQL来处理数据 提前致谢
答案 0 :(得分:0)
假设您想要这种格式的数据:
[{'matchnumber': '1', 'winner': 'Russia', 'point': '800'}, {'matchnumber': '2', 'winner': 'Egypt', 'point': '800'}, ...]
你可以尝试
output = []
for i in range(len(result2['matchnumber'])):
di = {}
for key in result2.keys():
di[key] = result2[key][i]
output.append(di)
print(output)
[{'matchnumber': '1', 'winner': 'Russia', 'point': '800'}, {'matchnumber': '2', 'winner': 'Egypt', 'point': '800'}, {'matchnumber': '3', 'winner': 'Morocco', 'point': '800'}, {'matchnumber': '4', 'winner': 'Portugal', 'point': '800'}, {'matchnumber': '5', 'winner': 'France', 'point': '800'}, {'matchnumber': '6', 'winner': 'Argentina', 'point': '800'}, {'matchnumber': '7', 'winner': 'Peru', 'point': '800'}, {'matchnumber': '8', 'winner': 'Croatia', 'point': '800'}]
然后你可以迭代output
并处理每个字典