如何在使用flask-sqlalchemy时为wtforms-alchemy设置会话?
我在我的应用程序中使用flask-sqlalchemy,并通过init_app()来初始化SQLAlchemy,像这样:
in config file :
SQLALCHEMY_DATABASE_URI = 'sqlite:///example.db'
---------------------
in extension file :
from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()
---------------------
in application file:
#in my application file that generate my app
from ----- import db
db.init_app(app)
我的模型是:
from -------- import db
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, autoincrement=True , primary_key=True)
username = db.Column(db.String(50),unique=True)
password = db.Column(db.String(50))
email = db.Column(db.String(50),unique=True)
def __repr__(self):
return '<User %r>' % self.username
现在当我在form.py中使用wtforms-alchemy,像这样:
from wtforms_alchemy import ModelForm
class UserForm(ModelForm):
class Meta:
model = User
我遇到了这个错误:
File "/usr/local/lib/python2.7/dist-packages/wtforms_components/validators.py", line 220, in _check_for_session
raise Exception('Could not obtain SQLAlchemy session.')
Exception: Could not obtain SQLAlchemy session.
我该如何修复这个问题呢?
1 个回答
1
为了让WTForms-Alchemy能够和Flask-WTF一起使用,你需要以下这段代码:
from flask.ext.wtf import Form from wtforms_alchemy import model_form_factory ModelForm = model_form_factory(Form)
然后你就可以像以前一样使用ModelForm了:
class UserForm(ModelForm): class Meta: model = User
这确实依赖于User
有一个.query
对象;也就是说,你的User
模型必须是从db.Model
派生的。如果不是的话,你需要在表单上定义一个get_session
方法:
class UserForm(ModelForm):
class Meta:
model = User
def get_session(self):
return db.session