【问题标题】:How to keep track of Form field changes in Flask-WTF?如何跟踪 Flask-WTF 中的表单字段变化?
【发布时间】:2013-05-08 12:02:07
【问题描述】:

我有成员字段的模型,如下所示:

class Team(db.Model):
    --- some fields ---
    members = ListProperty(db.Key) # Using App Engine datastore as backend.

我正在使用 Flask-WTFforms 使用此模型创建表单。在创建新团队时,用户将在表单中选择一些成员并保存。用户还可以编辑团队表单并对成员字段进行更改(可以添加或删除成员)。我想通过与之前存储在成员字段中的数据进行比较来检查添加或删除了多少成员。同样适用于其他领域。

我使用会话来实现这一点:

def edit_team(key):

k = db.Key(key)
team = db.get(k)
form = TeamForm(obj = team)
if not form.is_submitted(): # Indicates GET request
    session[str(g.user.user_id() + 'prev_members'] = form.members.data
if form.validate_on_submit():
    form.populate_obj(project)
    # I will use session data with new form.members.data to do further processing.

这是处理这种情况的正确方法吗? 谢谢你的帮助..

【问题讨论】:

    标签: python google-app-engine flask wtforms flask-wtforms


    【解决方案1】:

    你的代码有问题

    team = db.get(k)
    form = TeamForm(obj = team)
    

    如果请求是GET,则必须从模型中加载对象的数据。但是,如果请求是POST(或PUTPATCH),则意味着您需要阅读请求正文以形成对模型进行适当更新的形式。看来您正在使用k 变量作为模型指标的关键。

    k = db.Key(key)
    team = db.get(k)
    if request.method == "GET":
        # create form from the model
        form = TeamForm(obj = team)
    
    elif request.method == "POST":
        # update model with the form
        form = TeamForm() #flask-wtf automatically reads from request object
        # validate, update, delete, ...
    

    【讨论】:

    • 感谢您的回答。我的方法和你的方法一样。如果 validate_on_submit() 为 False,则视为 GET 请求,并使用 form = TeamForm(obj=team) 构造表单,如果 validate_on_submit() 为 True,则视为 POST 请求。我想在 GET 请求中保存表单数据并在 POST 请求中处理它。我也可以跟踪发生了什么变化。有关 validate_on_submit() 的更多信息:此方法依次调用 form.is_submitted() 和 form.validate()。 is_submitted() 方法是区分 GET 和 POST 的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多