2

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

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

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

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

def 编辑团队(键):

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.

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

4

1 回答 1

0

你的代码的问题是

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, ...
于 2013-05-14T09:33:03.830 回答