そのため、Flask セッション オブジェクトから使用している WTForms にリストを渡す際に問題が発生しています。セッション オブジェクト内の「戦略」オブジェクト (リスト) にアクセスしようとしています。
目標は、現在のユーザーに関連付けられているすべての戦略を一覧表示することです。
Flask アプリ内:
class Create_Indicator_Form(Form):
security = TextField('Ticker Name', [
validators.Required(),
validators.Length(min=1, max=6)])
mva_10 = BooleanField('10 day moving average')
mva_25 = BooleanField('25 day moving average')
strategy = SelectField('strategy', session['strategy'])
def validate_mva_10(form, field):
if form.mva_25.data is True and field.data is True:
raise ValidationError('You can only choose one reference')
if form.mva_25.data is False and field.data is False:
raise ValidationError('You must choose at least one reference')
@app.route('/create_indicator', methods=['GET', 'POST'])
def create_indicator():
check_if_logged_in()
f = request.form
create_indicator_form = Create_Indicator_Form(f)
if request.method == 'POST' and create_indicator_form.validate():
indicator_id = get_next_index('indicator', 'indicator_id')
ticker = create_indicator_form.security.data
if create_indicator_form.mva_10.data is True:
mva_10_day = 'Y'
mva_25_day = 'N'
else:
mva_10_day = 'N'
mva_25_day = 'Y'
row = [indicator_id, ticker, mva_10_day, mva_25_day]
add_data('indicator', row)
# adding relation
criteria_row = [session['strategy'][0], indicator_id]
add_data('criteria', criteria_row)
return redirect(url_for('home'))
create_indicator_form.strategies = session['strategy']
return render_template('create_indicator.html',
form=create_indicator_form)
フラスコアプリを実行しようとすると、次のエラーがスローされます。
RuntimeError: working outside of request context
Create_Indicator_Form クラスのセッション オブジェクトにアクセスした場所までさかのぼってトレースします。
これを修正しようとして以来、選択フィールドで mva_10 と mva_25 の間で選択する方が効率的であることに気付きましたが、リファクタリングする前にこの問題を解決したいと思います。