Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从数据库或会话数据填充字段的正确方法是什么?_Python_Session_Flask_Wtforms - Fatal编程技术网

Python 从数据库或会话数据填充字段的正确方法是什么?

Python 从数据库或会话数据填充字段的正确方法是什么?,python,session,flask,wtforms,Python,Session,Flask,Wtforms,当用户登录时,我将在会话中存储一些变量,以便稍后用于填充字段 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(

当用户登录时,我将在会话中存储一些变量,以便稍后用于填充字段

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)

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

类定义中的代码在导入时执行,而不是在实例化类时执行。您需要将对
会话
的访问移动到
\uuuu init\uuuu
方法,以便在视图函数中创建表单时可以访问该方法

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)
这适用于需要应用程序或请求上下文的任何内容,例如数据库查询,而不仅仅是
会话