Skip to main content
 首页 » 编程设计

python之使用 WTForms 表单数据更新模型

2025年05月04日22JeffreyZhao

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