2017-10-06 125 views
1

我有一些Flask-SQLAlchemy模型和用wtforms_alchemy生成的Flask-WTF表單來表示它們。我在每個模型上實現了一個方法來更新表單數據的屬性。對於每個新模型和領域,我必須更新這些方法,這很煩人。有沒有辦法讓這個更自動化,或者我正在使用的庫中的一個功能,我失蹤了?用WTForms表格數據更新模型

def edit_car(car_id): 
    form = CarForm(request.form) 
    if form.is_valid(): 
     car = Car.query.get_or_404(car_id) 
     car.from_form(form) # Update car fields 
     ... 
     # save car in database ... 

class Car(db.Model): 
    color = db.Column(db.String(10)) 
    ... 

    def from_form(self, form): 
     self.color = form.color.data 
     ... # all other fields 

回答

3

使用表格的populate_obj方法填寫模型。它設置與每個字段相同名稱的屬性。

form.populate_obj(car) 
db.session.commit() 

如果行爲簡單「的字段名稱設置屬性」不適合某個特定的模式/形式對(儘管它應該是你的情況),您可以覆蓋的方法。

class SpecialCarForm(FlaskForm): 
    ... 

    def populate_obj(obj): 
     # mess with data, set extra fields, etc. 
     # potentially call super after 
     super().populate_obj(obj)