2015-01-28 3 views
0

Я сохраняю некоторые переменные в сеансе, когда пользователь входит в систему, чтобы позднее использовать поле для заполнения.Каков правильный способ заполнения выбора из данных сеанса?

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) 

Когда я запускаю приложение, я получаю сообщение об ошибке «работающий вне контекста запроса». Каков правильный способ заполнения этого поля из данных сеанса?

ответ

7

Код в определении класса выполняется во время импорта, а не при создании экземпляра класса. Вам необходимо переместить доступ к 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',))] 
     Form.__init__(self, *args, **kwargs) 

Это относится ко всему, что нуждается в контексте приложения или запроса, например, запрос к базе данных, а не только session.

Смежные вопросы