使用WTForms表单数据更新模型

时间:2017-10-06 16:14:02

标签: python flask flask-sqlalchemy wtforms flask-wtforms

我有一些使用wtforms_alchemy生成的Flask-SQLAlchemy模型和Flask-WTF表单来表示它们。我在每个模型上实现了一个方法,以从表单的数据更新其属性。对于每个新模型和字段,我必须更新这些方法,这很烦人。有没有办法让这个更自动,或者我正在使用的库中的一个功能,我错过了?

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

1 个答案:

答案 0 :(得分: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)