从数据库或会话数据填充字段的正确方法是什么?
What is the correct way to populate fields from database or session data?
我在用户登录时在会话中存储了一些变量,以便稍后用于填充字段。
from flask_wtf import Form
from wtforms import SelectField
from flask import session
class InstitutionForm(Form):
city = session['city']
city_tuples = [(x, x) for x in city]
organisation = SelectField(
'organisation',
choices=city_tuples
)
class Institution(View):
methods = ['POST']
def dispatch_request(self):
form = InstitutionForm()
return render_template(
'form/institution.html',
form=form)
当我 运行 应用程序时,我收到错误 'working outside of request context'。从会话数据填充此字段的正确方法是什么?
class 定义中的代码在导入时执行,而不是在实例化 class 时执行。您需要将对 session
的访问移至 __init__
方法,以便在视图函数中创建表单时访问它。
class Institution(Form):
organization = SelectField()
def __init__(self, *args, **kwargs):
self.organization.kwargs['choices'] = [(x, x) for x in session.get('city', ('not set',))]
super().__init__(*args, **kwargs)
这适用于任何需要应用程序或请求上下文的东西,例如数据库查询,而不仅仅是 session
。
我在用户登录时在会话中存储了一些变量,以便稍后用于填充字段。
from flask_wtf import Form
from wtforms import SelectField
from flask import session
class InstitutionForm(Form):
city = session['city']
city_tuples = [(x, x) for x in city]
organisation = SelectField(
'organisation',
choices=city_tuples
)
class Institution(View):
methods = ['POST']
def dispatch_request(self):
form = InstitutionForm()
return render_template(
'form/institution.html',
form=form)
当我 运行 应用程序时,我收到错误 'working outside of request context'。从会话数据填充此字段的正确方法是什么?
class 定义中的代码在导入时执行,而不是在实例化 class 时执行。您需要将对 session
的访问移至 __init__
方法,以便在视图函数中创建表单时访问它。
class Institution(Form):
organization = SelectField()
def __init__(self, *args, **kwargs):
self.organization.kwargs['choices'] = [(x, x) for x in session.get('city', ('not set',))]
super().__init__(*args, **kwargs)
这适用于任何需要应用程序或请求上下文的东西,例如数据库查询,而不仅仅是 session
。