【发布时间】:2016-02-14 03:28:08
【问题描述】:
出于某种原因,我需要在 __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,它有一个包含ItemForm 表单类的FieldList,将来我可以将ItemForm 交换到不同的类,例如PurchaseItemForm
【问题讨论】:
-
您应该重新阅读解释删除类属性时会发生什么的部分。目前它没有意义。
-
是的,谢谢,已经改了
-
您能否指定初始化实例的方式以及
transaction_label和self.transaction_label的定义位置? -
编辑了答案,它在那里,我如何指定实例构造函数。关于
transaction_label,它类似于transaction_items的行为方式,现在我只是将其删除以避免重复 -
Wilfo 是绝对正确的,因为 Form 是一个元类。我刚刚加入了stackoverflow,询问andiwinta他们是否可以发布他们的新PurchaseFOrm(BaseForm)。尝试使用 super().__init__() 并尝试扩展 Form 类时,我遇到了同样的问题。非常感谢。
标签: python wtforms flask-wtforms