【问题标题】:Update model with WTForms form data使用 WTForms 表单数据更新模型
【发布时间】:2018-03-18 12:08:59
【问题描述】:

我有一些 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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2014-07-23
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      • 2015-12-12
      相关资源
      最近更新 更多