4

z3c.form を使用してフォームを作成していて、CSS クラスをウィジェットに追加したいと考えています。

だから私は css クラスを追加するために upadateWidgets メソッドを定義しようとしていますが、 super() でこのエラーが発生しました:

2012-08-02 16:17:22 ERROR Zope.SiteErrorLog 1343917042.940.871101881907 http://pin:34180/Plone/alger/etape1
Traceback (innermost last):
  Module ZPublisher.Publish, line 126, in publish
  Module ZPublisher.mapply, line 77, in mapply
  Module ZPublisher.Publish, line 46, in call_object
  Module z3c.form.form, line 215, in __call__
  Module z3c.form.form, line 208, in update
  Module plone.z3cform.patch, line 21, in BaseForm_update
  Module z3c.form.form, line 149, in update
  Module bsw.inscription.browser.etape1, line 32, in updateWidgets
TypeError: super(type, obj): obj must be an instance or subtype of type

これはコードです:

from zope import interface, schema
from z3c.form import form, field, button, validator
import zope.component

from bsw.inscription import inscriptionMessageFactory as _

class IEtape1Schema(interface.Interface):
    # -*- extra stuff goes here -*-

    valide_informations = schema.Bool(
        title=u"J'assure avoir pris connaissance de toutes les informations ci-dessus",
        description=u'',
        required=True,
        readonly=False,
        default=False,
        )


class Etape1(form.Form):

    fields = field.Fields(IEtape1Schema)
    ignoreContext = True

    label = _(u'Etape 1')
    description = _(u'')

    def updateWidgets(self):
        """ Customize widget options before rendering the form. """
        super(Etape1, self).updateWidgets()
        self.fields['valide_informations'].widget.addClass("myClass")

    @button.buttonAndHandler(u'Submit')
    def actionSubmit(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return
        pass
        # Put the action handler code here 


class checkBoxValidator(validator.SimpleFieldValidator):
    def validate(self, value):
        if not value:
            raise zope.interface.Invalid(_(u"Vous devez accepter les conditions"))

# Set conditions for which fields the validator class applies
validator.WidgetValidatorDiscriminators(checkBoxValidator, field=IEtape1Schema['valide_informations'])

# Register the validator so it will be looked up by z3c.form machinery

zope.component.provideAdapter(checkBoxValidator)

私はたくさんの例を読んだことがありますが、どこが間違っているのかわかりません...

4

1 に答える 1

7

z3c.form フォームを Plone とメイン テンプレートで動作させるために多くの再ラッピングが行われているため、フォームのクラス階層は登録時に変更されています。

その結果、super()呼び出しはこのような形式で壊れており、バインドされていないメソッドを直接呼び出す必要があります。

def updateWidgets(self):
    """ Customize widget options before rendering the form. """
    form.Form.updateWidgets(self)
    self.fields['valide_informations'].widget.addClass("myClass")
于 2012-08-02T15:01:10.153 に答える