用WTForms表格数据更新模型
问题描述:
我有一些Flask-SQLAlchemy模型和用wtforms_alchemy生成的Flask-WTF表单来表示它们。我在每个模型上实现了一个方法来更新表单数据的属性。对于每个新模型和领域,我必须更新这些方法,这很烦人。有没有办法让这个更自动化,或者我正在使用的库中的一个功能,我失踪了?用WTForms表格数据更新模型
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)