2013-07-19 4 views
1

Я использую фреймворк web2py, и я пытаюсь создать SQLFORM без кнопки отправки. У меня есть несколько форм, с общими полями, поэтому я не могу использовать SQLFORM.factory(), и я хочу иметь только одну из форм с кнопкой отправки, которая будет обрабатывать данные из всех других форм на странице. Любые предложения по наилучшему способу сделать это?SQLFORM без кнопки отправки

ответ

0

Я думаю, что вы можете комбинировать различные SQLFORM, добавляя одну форму в другую. Таким образом, вы получите только одну «множественную форму» только с одной кнопкой отправки. Что-то вроде этого в вашем контроллере:

form1 = SQLFORM(db.table1) 
form2 = SQLFORM(db.table2) 

form1.append(form2) 
if form1.process().accepted: 
    #filter the fields from each form do whatever you want 
    response.flash = 'OK' 
elif form1.errors: 
    response.flash = 'NOT OK' 

return dict(form=form1) 

Вы видите, что я только что спросил в форме1? Это потому, что он является основной формой и, конечно же, вы сделали правильный фильтр среди своих форм. Надеюсь это поможет.

1

Я предполагаю, что одним из способов сделать это может быть установка полей _formkey и _formname всех форм в одно и то же значение. Что-то вроде этого:

my_form2.formname = my_form1.formname 
my_form2.formkey = my_form1.formkey 

Если вы хотите, чтобы скрыть кнопки отправки вручную, попробовать что-то вроде этого:

my_form1.element('input', _type = 'submit')['_style'] = 'display:none' 

Оставить одну из кнопок отправки, для которых FormName и formkey было установлено равным значениям других форм нетронутыми - эта кнопка будет использоваться для отправки форм.

Вставка вары в БД таблиц можно сделать что-то вроде:

db.table1.insert(**db.table1._filter_fields(request.vars)) 
db.table2.insert(**db.table2._filter_fields(request.vars)) 

Если поля имеют одинаковые имена, может быть некоторый потенциал для беспокойства, так что будьте осторожны.

2
form1 = SQLFORM(db.table1, buttons=[]) 

это установит форму без кнопок, поэтому не отправляйте тоже.

Смежные вопросы