2017-10-06 13 views
1

wtforms_alchemyを使用して生成されたFlask-SQLAlchemyモデルと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 

答えて

3

モデルの記入には、フォームの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) 
関連する問題