web2py: выпадающий sqlform без действий отправки и формы

Это немного за пределами моего понимания 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 на основе выбранной опции?

огромное спасибо

1 ответ

Если у тебя есть 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>
Другие вопросы по тегам