在循环中发布Flask wtforms并保存数据

时间:2016-10-11 19:38:34

标签: python flask e-commerce wtforms flask-wtforms

我在for循环中有一个 Flask-WTF 表单字段。我想发布每个项目的新数量。

我正在阅读有关字段列表的内容。我仍然不明白,但我认为他们可能是答案。

@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 个答案:

答案 0 :(得分:1)

我确实遇到了同样的问题!但是我没有使用Flask-WTF解决它,下面的解决方案基于我的应用程序。我有一个专辑编辑页面,我需要为专辑中的每张图片循环一个文本输入,然后保存每张图片的文本。

我在HTML中循环输入,请注意我为另一个视图函数设置了操作值,并且将每张照片的ID用作每个文本输入的名称

<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">

然后我循环播放图片并保存输入数据(通过它的id 获取它的值):

@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)