我正在尝试从 wtforms 的默认字段类创建子类。
class MyForm(Form):
fieldName = MyField('field name')
MyField 是从另一个文件导入的
class MyField(TextField):
def __init__(self):
super(MyField, self).__init__(**kwargs)
但是当我创建一个源自这里的 MyForm 时出现了一些错误:
In [5]: f = MyForm()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
path/<ipython-input-5-decc3699f7c4> in <module>()
----> 1 f = RegistrationForm()
path/wtforms/form.pyc in __call__(cls, *args, **kwargs)
176 fields.sort(key=lambda x: (x[1].creation_counter, x[0]))
177 cls._unbound_fields = fields
--> 178 return type.__call__(cls, *args, **kwargs)
179
180 def __setattr__(cls, name, value):
path/wtforms/form.pyc in __init__(self, formdata, obj, prefix, **kwargs)
222 of a matching keyword argument to the field, if one exists.
223 """
--> 224 super(Form, self).__init__(self._unbound_fields, prefix=prefix)
225
226 for name, field in iteritems(self._fields):
pathwtforms/form.pyc in __init__(self, fields, prefix)
37
38 for name, unbound_field in fields:
---> 39 field = unbound_field.bind(form=self, name=name, prefix=prefix, translations=translations)
40 self._fields[name] = field
41
path/wtforms/fields/core.pyc in bind(self, form, name, prefix, translations, **kwargs)
299
300 def bind(self, form, name, prefix='', translations=None, **kwargs):
--> 301 return self.field_class(_form=form, _prefix=prefix, _name=name, _translations=translations, *self.args, **dict(self.kwargs, **kwargs))
302
303 def __repr__(self):
TypeError: __init__() got an unexpected keyword argument '_form'
我想 _form 字段没有正确实例化。 任何想法如何做到这一点? 谢谢
请您参考如下方法:
您的 MyField.__init__ 方法缺少必需的关键字参数。试试这个:
class MyField(TextField):
def __init__(self, **kwargs): # You were missing the **kwargs
super(MyField, self).__init__(**kwargs)
函数调用中的 * 和 ** 运算符(?) 执行以下操作:
- 如果在函数签名中使用,它们指定所有剩余的位置 (
*) 或关键字 (**) 参数应放在元组/dict(分别)并且数据应该绑定(bind)到*/**之后的名称。 - 如果在函数call 中使用,它们指定
tuple或list(对于*)或dict(对于**)应该被解包并作为参数列表/关键字参数传递给函数。
