【问题标题】:web2py: Radio Buttons not rendering on SQLFORM errorweb2py:单选按钮未在 SQLFORM 错误上呈现
【发布时间】: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


【解决方案1】:

我通过将生成的单选按钮包含在自己的 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多