Я пытаюсь создать форму, которая отображает все продукты из группы в списке. Им можно дать количество и добавить к цитате. Затем он сохраняется в базе данных.web2py: несколько форм на одной странице
Ни один из вариантов автомата не работает для меня. Поэтому я сделал каждую строку, показывающую информацию для данного продукта с полем «Количество», а кнопка «Добавить элемент» - это собственная форма. Но цикл, который делает каждую форму, делает что-то странное.
Контроллер:
products = db(db.product.group_id == productgroupnumber).select()
forms=[]
for product in products:
form = FORM(TABLE(TR(TD(product.productname),
TD((product.purchasecost or 0)),
TD((product.monthlycost or 0)),
TD(INPUT(_type='number', _name='quantity')),
TD(INPUT(_type='submit', _value=T('Add to Offer')))
)
)
)
forms.append(form)
session.quotedproducts = []
if form.accepts(request, session, keepvalues = True):
product = db(db.product.id == product_id).select().first()
offeritem = [product_id, request.vars.quantity, product.purchasecost, product.monthlycost]
session.quotedproducts.append(offeritem)
response.flash = T("Item added to offer")`
Для 2 ряда. Вид имеет следующие 2 формы, только с одним скрытым div с ключом формы и именем формы. Поэтому я не могу назвать формы для их правильной обработки:
<form action="#" enctype="multipart/form-data" method="post">
<table>
<tr>
<td>Block of 10 Phone Numbers</td>
<td>19.0</td>
<td>0</td>
<td><input name="quantity" type="number" /></td>
<td><input type="submit" value="Add to Offer" /></td>
</tr>
</table>
</form>
<form action="#" enctype="multipart/form-data" method="post">
<table>
<tr>
<td>100 Block of Phone Numbers</td>
<td>149.0</td>
<td>0</td>
<td><input name="quantity" type="number" /></td>
<td><input type="submit" value="Add to Offer" /></td>
</tr>
</table>
<!--Why is there only one of these??-->
<div style="display:none;">
<input name="_formkey" type="hidden" value="b99bea37-f107-47f0-9b1b-9033c15e1193" />
<input name="_formname" type="hidden" value="default" />
</div>
</form>
Как указать формы для отдельных имен (желательно product.id)? Я попытался добавить FORMNAME аргумент:
form.accepts(request, session, formname=product.id)
Но это только имена одну форму, а другой еще называют «по умолчанию».
Должен ли пользователь иметь возможность отправлять несколько форм одновременно или одно представление включает только одну форму? – Anthony
Только одна форма. Таким образом, строка имеет поле количества и кнопку «Добавить в цитату». За один раз можно добавить только продукт. – Eddie