代码之家  ›  专栏  ›  技术社区  ›  geckos

使用WTForms表单数据更新模型

  •  1
  • geckos  · 技术社区  · 7 年前

    我有一些烧瓶SQLAlchemy模型和用wtforms\u alchemy生成的烧瓶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 回复  |  直到 7 年前
        1
  •  6
  •   SuperShoot npburns224    5 年前

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