Как установить сессию для wtforms-alchemy, когда я использую flask-sqlalchemy?
Я использую в моем приложении flask-sqlalchemy и init SQLAlchemy() с помощью init_app() следующим образом:
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
Теперь, когда я использую wtforms-alchemy в моем form.py, вот так:
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 ответ
Решение
Из расширенного раздела WTForms-Alchemy:
Чтобы заставить 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