Skip to main content
 首页 » 编程设计

python之从数据库或 session 数据填充字段的正确方法是什么

2025年05月04日13pengyingh

当用户登录时,我会在 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) 

当我运行该应用程序时,我收到错误消息“在请求上下文之外工作”。从 session 数据填充此字段的正确方法是什么?

请您参考如下方法:

类定义中的代码在导入时执行,而不是在实例化类时执行。您需要将对 session 的访问权移至 __init__ 方法,以便在 View 函数中创建表单时访问它。

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。