我在我的金字塔应用程序中使用wtforms_sqlalchemy并定义几个QuerySelectField
s。查询工厂使用导入的DBSession
对象进行查询。使用WTForms QuerySelectField与金字塔1.7的数据库会话
from wtforms.form import Form
from wtforms_sqlalchemy.fields import QuerySelectField
from myapp.models import DBSession, MyModel
def mymodel_choices():
choices = DBSession.query(MyModel)
return choices
class MyForm(Form):
mymod = QuerySelectField(u'Field', query_factory=mymodel_choices)
金字塔1.7引入了一个新的SQLAlchemy scaffold,它将db会话对象附加到每个请求。使用新的脚手架mymodel_choices
必须使用我的视图中的request
来访问数据库会话。该字段虽然不具有对请求对象的访问权限,但不知道用它来调用工厂。
我的想法是直接从视图更新query_factory
,但这似乎不是一个合理的方式来做到这一点。当db会话是请求对象的一部分时,我怎样才能使用QuerySelectField
?
使用python2,super()方法不像这样写,使用** super(Form,self).__ init __(** kwargs)** –
@ JérômePigeot自然就是这样,只是大卫主义认为你没有使用过时的Python版本;) –