Как установить сессию для 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
Другие вопросы по тегам