何らかの理由で__init__()
、任意のタイプのを作成できるように、内部でフィールドを宣言する必要がありFormField
ます。
例を見てみましょうform.py
:
class PurchaseForm(Form):
item_class = ItemForm
transaction_items = FieldList(FormField(item_class),
label='items',
min_entries=1)
def __init__(self, item_class, *args, **kwargs):
super().__init__(*args, **kwargs)
self.item_class = item_class
self.transaction_items = FieldList(FormField(self.item_class),
label='items',
min_entries=1)
そのようにすると、transaction_items
フィールドはに置き換えられませんが__init__()
、何かをオーバーライドすることはできますか?またはsetattr
この特定のインスタンスのために何かのようなことをしますか?
編集:コンストラクターを指定する方法は次のとおりです
import form
@app.route('/add/purchase-transaction', methods=['GET', 'POST'])
def add_purchase_transaction():
form = forms.PurchaseForm(form.ItemForm)
if form.validate_on_submit():
# do something
return render_template('add-purchase-transaction.html', form=form)
私の目標は作ることですので、PurchaseForm
これは持っているFieldList
含むItemForm
フォームクラスを、そして将来的には私が交換することができますItemForm
に、たとえば、別のクラスにPurchaseItemForm
そもそも、あなたsuper().__init__(*args, **kwargs)
は有効ではなく、そうあるべきだと思いますsuper(PurchaseForm, self).__init__(*args, **kwargs)
-私たちはあなたのコードをそのように実行することができますか?
また、それが機能していないことをどのように判断できますか-このコードから作成されたフォームを調べます-それは問題ないように見えます:
class ItemForm(Form):
openid = StringField('openid', validators=[])
remember_me = BooleanField('remember_me', default=False)
class PurchaseForm(Form):
item_class = ItemForm
transaction_items = None
def __init__(self, item_class, *args, **kwargs):
super(PurchaseForm, self).__init__(*args, **kwargs)
self.item_class = item_class
self.transaction_items = FieldList(FormField(self.item_class),
label='items',
min_entries=1)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加