私はこのフラスコのアプリケーションを作成しています。前のフォームで定義された変数を別のフォームに渡す
あなたがフラスコ内にフォームを定義するとき、あなたは次のことをやる、ほとんどの時間:
class MyForm(Form):
my_field = StringField('I'm a field')
my_submit = SubmitField('Go!')
そして、あなたはフォームを必要な場所、時間が来るとき、あなたはそれのインスタンスを宣言しますここまでform = MyForm()
を持つクラスは、それはしかし、すべての良いことだ:
あなたは選択肢が前のフォームの回答に依存(ドロップダウン)、あなたが与えることができるようにする必要がありSelectField
、言いたい場合それらの選択肢を新しい形にする。これは私が達成しようとしているものですが、その内容を保持する変数を得ることはできません。ここで
は私のフォームコード(上記のページのコード)である:ここでは
class DataMappingForm(Form):
dm_choices = #I need this array !
DMpatient_id = SelectField(u'Select Patient ID Column',
choices=dm_choices, validators=[Required()])
...
は私のページのコードです:
@app.route('/upload', methods=['GET','POST'])
def upload():
uform = SomeOtherForm()
if uform.is_submitted() and uform.data['Usubmit']:
#Do stuff from previous form
# and declare array_of_choices
dmform = DataMappingForm() #Needs array_of_choices to work
...
私がこれまで試したどのような:
-
を
- セッション['dm_choices']は私に
working outside of request context
エラーを返します - グローバル変数は何らかの理由でリセットされます
__init__
はフォームを追加することでフォームにオーバーロードされますが、__init__
機能の上の部分ではアクセスできません。
これはすべて同じページにある必要があります。
array_of_choices
をDataMappingForm
クラスに渡す方法はありますか?
class DataMappingForm(Form):
def __init__(self, dm_choices, *args, **kwargs):
self.dm_choices = dm_choices
Form.__init__(self, *args, **kwargs)
DMpatient_id = SelectField(u'Select Patient ID Column',
choices=dm_choices, validators=[Required()])
#I've tried putting it above or below, I get 'dm_choices is not defined'
ページをリロードせずにフォームを動的にする必要がありますか? Flaskはサーバーサイドコードのみを処理し、クライアント側のダイナミクスはjavascriptが必要です。 – syntonym
いいえ、私はページリロードを使用しています。つまり、同じページ(リロード後)の最初のページを参照すると、2番目のフォームが表示されます。 –
セッションのアプローチと '__init__'のオーバーロードは、作業。具体的なコードを教えていただけますか? [Here](http://wtforms.simplecodes.com/docs/1.0.1/specific_problems.html#dynamic-form-composition)は、動的フォームに関するドキュメントです。 – syntonym