2015-08-21 6 views
1

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

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

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

Но сейчас я работаю над формой, в которой поля расщепленного в двух fieldsets:

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'], но все же я не вижу доступа к виджетам для полей внутри групп.

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

+0

Не могу найти источники быстро, но я думаю, помнить, что это не возможно :-( –

+0

Ах, вот это is: https://github.com/zopefoundation/z3c.form/issues/2 –

+0

Спасибо @IdaEbkes! Чтение проблемы и связанный с ней вопрос SO по адресу http://stackoverflow.com/questions/15385575/plone-4-dexterity -viewform-add-css-class-to-widget-in-fieldset-x говорит о скрытом поле. У меня проблемы с полями * visible *, поэтому я боюсь, что я пропустил что-то во время отладки. Оставайтесь с нами ... –

ответ

3

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

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() 
+0

Не работает, я получаю 'AttributeError: объект GroupFactory 'не имеет атрибутов' widgets'' при доступе к' group.widgets' –

+0

О, я вижу. Я запускал этот код в методе обновления, а не в updateWidgets. – alepisa

+0

Удивительный, он работает как шарм! Также с подформатом –