2012-09-18 2 views
2

wtforms의 기본 필드 클래스에서 하위 클래스를 만들려고합니다.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 필드가 아닌 가정 올바르게 인스턴스화됩니다. 아이디어가 있습니까? 감사합니다.

+0

게시 한 내용은 간단히 작동 할 수 없으며 그 위에는 명시된 오류가 생성 될 수 없습니다 (그렇게까지는 가지 않을 것입니다). 우선, 정의하기 전에 MyField를 인스턴스화하려고합니다. 이 문제를 해결하면 매개 변수를 전달하지만 매개 변수를 허용하지 않습니다. 이 두 가지 모두 부모 클래스를 호출하기 전에 언급 한 오류 이외의 오류를 유발합니다. 실제로 * 당신이 물어보고있는 오류를 게시하는 코드를 게시하십시오. * – kindall

+0

MyField 클래스가 다른 파일에 정의되어 있습니다. 나는 그 지위를 편집했다. – d3m

답변

1

MyField.__init__ 메서드에 필수 키워드 args가 누락되었습니다. 이 시도 :

class MyField(TextField): 
    def __init__(self, **kwargs): # You were missing the **kwargs 
     super(MyField, self).__init__(**kwargs) 

*** 사업자 함수 호출에는 다음을 수행 (?) : 함수의 서명에 사용되는 경우

  • 그들이 지정하는 것이 남아있는 모든 위치 (*) 또는 키워드 (**) 인수는 각각 tuple/dict에 있고 데이터는 */** 다음에 오는 이름으로 바인딩되어야합니다. 그들은 (**) 또는 dict (* 용) tuple 또는 list이 압축 해제 및 인수/키 - 워드 인수 목록으로 함수에 전달되도록 지정하는 기능 호출에 사용되는 경우
  • .