在web2py自定义表单中添加单选按钮

2 投票
1 回答
2252 浏览
提问于 2025-04-17 02:30

我想在一个自定义表单中把一个字段显示成单选按钮组。我希望每个单选按钮都放在表格的不同行上。问题是,当我使用 {{=form.custom.selection_type[0]}} 时,生成的控件被包裹在了不需要的 trtd 标签里。有没有办法只添加单选按钮呢?

我的表单:

{{extend 'layout.html'}}
{{=form.custom.begin}}
<table>
  <tr>
    <td> {{=form.custom.selection_type[0]}}:</td>
    <td> {{=form.custom.widget.biller_list}}</td>
  </tr>
  <tr>
    <td> {{=form.custom.widget.selection_type[1]}}:</td>
    <td> {{=form.custom.widget.biller_code}}</td>
  </tr>
</table>
{{=form.custom.end}}

这是在HTML源代码中发生的情况的例子:

<table>
  <tr>
    <td> <tr><td><input name="selection_type" type="radio" value="From my biller list" />From my biller list</td></tr>:</td>
    ...
  </tr>
...
</table>

我的模型:

db.define_table('payment_bpay_step1',
    Field('selection_type', 'list:string'),
    Field('biller_list', db.biller, notnull=True),
    Field('biller_code'),
    Field('biller_name'))
db.payment_bpay_step1.selection_type.requires = IS_IN_SET(('From my biller list', 'Search by biller code', 'Search by biller name'))
db.payment_bpay_step1.selection_type.widget = SQLFORM.widgets.radio.widget

1 个回答

1

现在这个功能还没有稳定版本,但在开发版本中,你可以为单选按钮小部件指定使用

    样式,而不是传统的表格样式。我想可以这样写:

    db.payment_bpay_step1.selection_type.widget = \
        lambda f, v: SQLFORM.widgets.radio.widget(f, v, style='divs')
    

    你也可以创建一个自定义的小部件,具体的做法可以参考这本书的最后一部分

    当你说想要“innerhtml”和单选按钮的值不一样时,你是指单选按钮旁边的标签吗?如果是这样的话,IS_IN_SET验证器有一个'labels'参数,它是一个与选项相关的标签列表。

撰写回答