#python #flask #e-commerce #wtforms #flask-wtforms
#python #flask #электронная коммерция #wtforms #колба-wtforms #flask-wtforms
Вопрос:
У меня есть поля формы Flask-WTF в цикле for. Я хочу опубликовать новые количества для каждого элемента.
Я читаю о списке полей. Я все еще не понимаю, но я думаю, что они могут быть ответом.
@app.route('/checkout')
def checkout():
form = CartForm()
for item in current_user.cart:
product = Product.query.get(item.product_id)
cart_items.append({product: item.quantity})
return render_template('checkout.html',cart_items=cart_items,form=form)
{% for item in cart_items %}
{% for product, quantity in item.items() %}
{{product.name}}
{{product.price}}
{{form.quantity }}
{% endfor %}
{% endfor %}
Проблема 1: при циклическом переборе каждого поля формы Flask-WTF имеет одно и то же имя.
Вывод
<select id="quantity" name="quantity"><option value="1">1</option></select>
<select id="quantity" name="quantity"><option value="1">1</option></select>
проблема 2: как сохранить в резервной копии, если каждая форма имеет другое имя.
Ответ №1:
У меня точно такая же проблема! Но я решаю это без Flask-WTF, решение, приведенное ниже, было основано на моем приложении. У меня есть страница редактирования альбома, мне нужно зациклить ввод текста для каждого изображения в альбоме, а затем сохранить текст для каждого изображения.
Я зацикливаю ввод в HTML, обратите внимание, что я устанавливаю значение действия для другой функции просмотра и использую идентификатор каждой фотографии в качестве имени каждого текстового ввода:
<form action="{{ url_for('edit_photo', id=album.id) }}" method="POST">
<ul>
{% for photo in photos %}
<li>
<img class="img-responsive portrait" src="{{ photo.path }}" alt="Some description"/>
<textarea name="{{ photo.id }}" placeholder="add some description" rows="3">{% if photo.description %}{{ photo.description }}{% endif %}</textarea>
</li>
{% endfor %}
</ul>
<hr>
<input class="btn btn-success" type="submit" name="submit" value="submit">
Затем я зацикливаю изображение и сохраняю входные данные (получаю его значение по его идентификатору):
@app.route('/edit-photo/<int:id>', methods=['GET', 'POST'])
@login_required
def edit_photo(id):
album = Album.query.get_or_404(id)
photos = album.photos.order_by(Photo.order.asc())
if request.method == 'POST':
for photo in photos:
photo.about = request.form[str(photo.id)]
db.session.add(photo)
return redirect(url_for('.album', id=id))
return render_template('edit_photo.html', album=album, photos=photos)
Комментарии:
1. это не то, что я хотел, потому что я хотел дать им уникальные имена, чтобы я мог добавлять что-то с помощью javascript, за это было полезно большое спасибо
2. Обратите внимание, что я использую
photo.id
для имени значение:name="{{ photo.id }}"
, поэтому каждый ввод будет иметь уникальное имя.