首页 > 解决方案 > 表单的多个实例在提交时统一

问题描述

我有一个表格,它必须有一些字段多次。这就是为什么我将所有应该出现多次的字段提取到类AdvandcedGame中。所有唯一的字段都在Form类中。该类Form也是唯一一个带有提交按钮的类。当我按下提交时,AdvancedGame(A,B,C)的所有实例都是统一的(A,A,A)。你能告诉我为什么以及如何解决这个问题吗?

这是尽可能简化的代码

应用程序.py

from flask import Flask, render_template
from flask_restful import Resource, Api
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField

class AdvandcedGame(FlaskForm):
    name = StringField('name')

class Ui(FlaskForm):
    submit = SubmitField('submit')

app = Flask(__name__)
api = Api(app)
app.config['JSON_SORT_KEYS'] = False
app.config['SECRET_KEY'] = "303"


@app.route('/', methods=['GET', 'POST'])
def root():
    form = Ui()
    games = [AdvandcedGame(name='A'), AdvandcedGame(name='B'), AdvandcedGame(name='C')]

    for game in games:
        app.logger.info(game.name.data)
    # outputs
    # A
    # B
    # C

    if form.validate_on_submit():
        for game in games:
            app.logger.info(game.name.data)
        # outputs
        # A
        # A
        # A
    return render_template('index.html', form=form, games=games)



# Run the application
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

模板/index.html

<html>
    <head>
    </head>
    <body>
        {% if form is defined %}
            <form method="POST" action="{{ form.url }}">
                {{ form.csrf_token }}
                <table>
                    <tr>
                        <td>
                            {{ games[0].name.label }}
                        </td>
                        {% for game in games %}
                            <td>
                                {{ game.name }}
                            </td>
                        {% endfor %}
                    </tr>
                    <tr>
                        <td colspan=3>
                            {{ form.submit}}
                        </td>
                    </tr>
                </table>
            </form>
        {% endif %}
    </body>
</html>

标签: pythonflaskflask-wtformswtforms

解决方案


推荐阅读