0

这有点超出了我对 web2py 和 SQLFORMS 的理解。我有 5 个单独的命名下拉 SQLFORMS 正在访问相同的数据库表信息。我希望用户只在下拉列表中选择一个选项,就是这样,没有提交按钮。当他们选择一个选项时,我希望为页面生成另一个下拉 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?

太感谢了

4

1 回答 1

0

如果您的DAL表包含一个Field带有IS_IN_DBIS_IN_SET验证器作为其“要求”属性的表,则当您基于该表创建 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 = 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>
于 2013-05-28T11:48:00.017 回答