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( 'organisation', choices=city_tuples ) class Institution(View): methods = ['POST'] def dispatch_request(self): form = InstitutionForm() return render_template( 'form/institution.html', form=form)
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
Answered By – davidism