如何跟踪Flask-WTF中Form字段的变化? - python

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

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.

这是处理这种情况的正确方法吗?
感谢您的任何帮助..

参考方案

您的代码的问题是

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, ...

在选择上设置默认设置会删除为填充表单而传入的设置 - python

此代码可以单独正常工作。我的意思是,当我设置默认的tag并调用process()时,应填充表格的所有其他数据均已删除。在这种情况下,默认设置为ok,但其他字段为空。form = ReviewForm(**populate_form) form.tags.default = '1' form.process() 因此,似乎process清除…

python flask如何从URL获取路由ID - python

我正在用烧瓶。我有一个网址,例如:http://example.com/page/page_id我想知道如何从路线中的网址获取page_id部分。我希望我可以设计出一些方法,例如:@route('/page/page_id') def page(page_id): pageid = page_id 参考方案 这非常简单-在尖括号之间传递p…

WTForms Flask(wtf_flask)验证程序如何为RadioField包括“必需”属性 - python

我基本上在寻找的是WTForms的InputRequired()的RadioField等效验证器。我的意思是,当您尝试提交表单而不在具有InputRequired()验证器的StringField字段中输入任何文本时,用户会在文本字段上方看到提示,提示是"Please fill out this field"。我希望用户必须选择male或…

Python Eve包含过滤器 - python

有什么方法可以返回字段包含某些值的项目?例如。GET /people?contains="foo"返回名称中带有“ foo”一词的所有人。提前致谢 参考方案 您可以使用mongodb $regex运算符,该运算符在Eve(MONGO_QUERY_BLACKLIST = ['$where', '$regex&#…

Flask Cors无法运作 - python

我正在尝试在Flask应用程序中启用CORS,但无论我把来源如何,似乎总是可以从浏览器访问URL。我不知道我做错了什么。这是我的代码from flask import Flask, jsonify from flask_cors import CORS app = Flask(__name__) CORS(app, resources={r'/*&…