【问题标题】:What is the correct way to populate fields from database or session data?从数据库或会话数据填充字段的正确方法是什么?
【发布时间】:2021-07-18 01:26:54
【问题描述】:

当用户登录时,我在会话中存储了一些变量,以供以后填充字段。

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)

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

【问题讨论】:

    标签: python session flask wtforms


    【解决方案1】:

    类定义中的代码在导入时执行,而不是在类实例化时执行。您需要将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

    【讨论】:

      猜你喜欢
      • 2015-03-27
      • 2011-11-05
      • 1970-01-01
      • 2023-03-13
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      相关资源
      最近更新 更多