这有点超出了我对web2py和SQLFORMS的理解。我有5个单独的命名下拉SQLFORMS,它们访问相同的db表信息。我希望用户只需在下拉列表中选择一个选项即可,无需提交按钮。当他们选择一个选项时,我想要为页面生成另一个下拉列表SQLFORMS。
以下是代码:
def deck():
form1 = SQLFORM.factory(Field('cards', requires=IS_IN_DB(db, 'tbl_card.id', '%(name)s', orderby=db.tbl_card.id)))
form1.process(formname='form1')
form2 = SQLFORM.factory(Field('cards', requires=IS_IN_DB(db, 'tbl_card.id', '%(name)s', orderby=db.tbl_card.id)))
form2.process(formname='form1')
form3 = SQLFORM.factory(Field('cards', requires=IS_IN_DB(db, 'tbl_card.id', '%(name)s', orderby=db.tbl_card.id)))
form3.process(formname='form1')
form4 = SQLFORM.factory(Field('cards', requires=IS_IN_DB(db, 'tbl_card.id', '%(name)s', orderby=db.tbl_card.id)))
form4.process(formname='form1')
form5 = SQLFORM.factory(Field('cards', requires=IS_IN_DB(db, 'tbl_card.id', '%(name)s', orderby=db.tbl_card.id)))
form5.process(formname='form1')
#form = SQLFORM.factory(Field('evo', requires=IS_IN_DB(db, 'tbl_evo.id', '%(evo_type)s', orderby=db.tbl_evo.id)))
#form2.process(formname='form2')
return dict(form1=form1,form2=form2,form3=form3,form4=form4,form5=form5)
如何删除提交按钮?
如何基于所选的选项创建操作或生成下拉列表SQLFORM?
非常感谢
答案 0 :(得分:0)
如果您的DAL
表包含Field
,IS_IN_DB
或IS_IN_SET
验证程序作为其“require”属性,则在创建基于该表的SQLFORM时表,该字段将用<select>
元素表示。例如:
db.define_table('mytable', Field('myfield',
requires=IS_IN_DB(db, 'othertable.otherfield')))
form = SQLFORM(db.mytable)
上面将生成一个完整的HTML表单,包括一个提交按钮。如果您不想要整个表单但只想要特定字段的<select>
元素,您有两个选择:
从完整格式中提取元素:
select = form.element('select[name=myfield]')
或者,您可以跳过创建完整表单并直接创建select元素:
select = SQLFORM.widgets.options.widget(db.mytable.myfield,
db.mytable.myfield.default)
在页面上有select元素后,您可以使用Javascript来检测选择并采取您想要的任何操作:
<script>
jQuery('select[name=myfield]').on('change', function() {
[do something here]
});
</script>