web2py:没有提交和表单操作的sqlform下拉列表

时间:2013-05-28 08:52:40

标签: python web2py

这有点超出了我对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?

非常感谢

1 个答案:

答案 0 :(得分:0)

如果您的DAL表包含FieldIS_IN_DBIS_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>