web2py:在生成的radiobutton而不是table中使用div

时间:2011-05-18 17:54:16

标签: web2py

我有一张桌子:

db.define_table('table1',
    Field('name', 'string', length=16, required=True, unique=True),
    Field('shape', 'string', length=12, default='star', widget=SQLFORM.widgets.radio.widget, requires=IS_IN_SET(shapes)))

我使用此SQLFORM生成表单:

form = SQLFORM(db.table1, formstyle='divs')

我有使用div的主窗体,但单选按钮,仍然使用表格,这是我想要的div中的那个。我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:2)

我认为你必须创建一个自定义小部件(参见http://web2py.com/book/default/chapter/07#Widgets)。例如:

def div_radio_widget(field, value, **attributes):
    table=SQLFORM.widgets.radio.widget(field, value, **attributes)
    return DIV(
        *[SPAN(td.element('input'), LABEL(td.components[1]))
          for td in table.elements('td')],
        **table.attributes)

上面的小部件首先使用内置的单选按钮小部件创建一个表,然后从TD中提取输入元素和标签,并将所有内容放入DIV中。

在您的表定义中,只需替换:

widget=SQLFORM.widget.radio.widget

使用:

widget=div_radio_widget