What is the correct way to populate fields from database or session data?


I’m storing some variables in the session when the user logs in, to use later to populate a field.

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(

class Institution(View):

    methods = ['POST']

    def dispatch_request(self):

        form = InstitutionForm()
        return render_template(

When I run the app I get the error ‘working outside of request context’. What is the correct way to populate this field from the session data?


Code in a class definition is executed at import time, not when the class is instantiated. You need to move the access to session to the __init__ method so that it will be accessed when creating a form in a view function.

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)

This applies to anything that needs an application or request context, such as a database query, not just the session.

Answered By – davidism

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published