【发布时间】:2011-09-02 20:39:42
【问题描述】:
我正在使用带有 SQLFORM 的自定义单选按钮,如下所示:
def radioboxes(field,value):
items=[DIV(name,INPUT(_type='radio',_value=key,_name=field.name,value=value), _class='radio')
for key,name in field.requires.options() if key]
return items
db.define_table('table1',
Field('name', 'string', length=16, required=True, unique=True, ),
Field('shape', 'string', length=12, default='star', widget=radioboxes, requires=IS_IN_SET(shapes)))
我用它来编辑表格
record = db.table1(session.table1_id)
form = SQLFORM(db.table1, record, fields=['name', 'shape'], showid=False, deletable=True, delete_label='Delete', col3=col3) # edit/delete
这很好用,除非表单中有错误 - 如果我对名称字段使用非唯一值,我会收到预期的错误消息,但单选按钮不再正确呈现 - 它们显示如:
[<gluon.html.DIV object at 0x08C9F850>, <gluon.html.DIV object at 0x08C9F130>, <gluon.html.DIV object at 0x08C9FFD0>, <gluon.html.DIV object at 0x08C9F070>, <gluon.html.DIV object at 0x08C9FD10>, <gluon.html.DIV object at 0x08C9F8F0>, <gluon.html.DIV object at 0x08C9FE10>, <gluon.html.DIV object at 0x08C9FF90>, <gluon.html.DIV object at 0x08C9FE90>, <gluon.html.DIV object at 0x08C9F6B0>, <gluon.html.DIV object at 0x08C9F610>]
我该如何解决这个问题?
【问题讨论】:
-
我通过将生成的单选按钮包含在自己的 div 中来修复它: def radioboxes(field,value): items=[DIV(name,INPUT(_type='radio',_value=key,_name =field.name,value=value), _class='radio') for key,name in field.requires.options() if key] return DIV(*items) (在返回中添加了 DIV)
-
是的,您的小部件应该返回单个 HTML 帮助对象,而不是帮助对象列表。此外,如果您希望“名称”是唯一的,您应该添加一个
requires=IS_NOT_IN_DB(db, 'table1.name')。unique=True由数据库而非表单强制执行,因此非唯一名称将触发数据库错误,但不会在表单验证时给出正确的表单错误。
标签: web2py