繁体   English   中英

使用 WTForms 表单数据更新模型

[英]Update model with WTForms form data

我有一些 Flask-SQLAlchemy 模型和用 wtforms_alchemy 生成的 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

使用表单的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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM