2013-05-14 61 views
2

我有成員場模型,如下圖所示:如何跟蹤Flask-WTF中的表單字段更改?

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

我用的燒瓶WTFforms採用這種模式來創建表單。在創建新的Team時,用戶將選擇表單中的一些成員並保存。用戶還可以編輯團隊表格並更改成員字段(可以添加或刪除成員)。我想通過比較存儲在成員字段中的先前數據來檢查添加或刪除了多少成員。同樣適用於其他領域。

我使用的會話來實現這一目標:

高清edit_team(鍵):

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. 

這是處理這種情況的正確方法? 謝謝你的任何幫助..

回答

0

與您的代碼的問題是

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

如果請求GET,對象的數據已被從模型加載。但是,如果請求是POST(或PUT,PATCH),這意味着您需要讀取請求正文以形成適當的模型更新。看起來你正在使用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, ... 
+0

感謝您的回答。我的方法與您的方法相同。如果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()方法是區分POST和POST的方法。 – rajpy 2013-05-14 09:41:27