Как настроить виджет z3c.form для полей внутри групп (fieldsets)

У меня есть реестр панели управления Plone, и я пытаюсь использовать хорошо известный метод для настройки некоторых свойств виджетов для zope.schema.Text а также zope.schema.TextField,

Я обычно настраиваю updateWidgets таким образом:

def updateWidgets(self):
    super(MyEditForm, self).updateWidgets()
    self.widgets['my_text_area'].style = 'width: 100%'
    self.widgets['my_text_area'].rows = 7

Но сейчас я работаю над формой, где поля разделены на два набора полей:

class MySettingsEditForm(controlpanel.RegistryEditForm):
    schema = IMySettingsSchema
    groups = (Form1, Form2)
    # fields = nothing

Если я попытаюсь получить доступ self.widgets['my_text_area'] я получил KeyError, Кажется, как я не определил fields Атрибут Я не могу получить доступ напрямую к виджетам.

Я обнаружил, что у меня есть groups так что я могу назвать что-то вроде self.groups[0].fields['my_text_area'] но все же я не нахожу способ получить доступ к виджетам для полей внутри групп.

Как настроить атрибуты виджетов при использовании групп?

1 ответ

Решение

Я думаю, что вам нужно играть с подформой виджета, посмотрите этот код:

def fix_table_widget(self, name, widgets):
    sub_widgets = widgets[name].widgets
    for widget in sub_widgets:
        new_label = widget.subform.widgets['weekday'].value
        widget.subform.widgets['selected'].items[0]['label'] = new_label
        widget.subform.widgets['weekday'].mode = 'hidden'

def schoolrequest_customizations(self):
    ''' Customizations for the schoolrequest base views
    '''
    for group in self.groups:
        widgets = group.widgets
        if 'table_bus_to_school' in widgets:
            self.block_widget_table('table_bus_to_school', widgets)
            self.fix_table_widget('table_bus_to_school', widgets)

        if 'table_bus_to_home' in widgets:
            self.block_widget_table('table_bus_to_home', widgets)
            self.fix_table_widget('table_bus_to_home', widgets)

def update(self):
    super(MyForm, self).update()
    self.schoolrequest_customizations()
Другие вопросы по тегам