Django获得post.request的正确返回值

问题描述 投票:1回答:1

我想在Django中使用request.post来获取产品ID。我目前正在使用控制台进行测试,但我返回的唯一product_id值是1。

这是视图中的特定功能:

def test_view(request):
    cart_obj, new_obj = Cart.objects.new_or_get(request)
    my_carts_current_entries = Entry.objects.filter(cart=cart_obj)
    products = Product.objects.all()
    if request.POST:

        product_id = request.POST.get('product_id')
        entry_quantity = request.POST.get('entry_quantity')

        product_obj = Product.objects.get(id=product_id)


        print(product_id)
        # print(entry_quantity)
        # Entry.objects.create(cart=cart_obj, product=product_obj, quantity=product_quantity)
    return render(request, 'carts/test.html', {'cart_obj': cart_obj, 'my_carts_current_entries': my_carts_current_entries,
                                              'products': products})

这是模板上的html。

<form method="POST">
    <br>
    {% csrf_token %}
    {% for product in products %}
    {{ product.name }} <br>
    <button>Add to Basket</button>
    {{ product.id }}
    <input type="hidden" name='product_id' value='{{ product.id }}'>
    <br>
    {% endfor %}
</form>
python django django-views
1个回答
2
投票

您的问题是,您在1 <input>中拥有尽可能多的<form>标签,就像您展示的产品一样多。它们都具有相同的名称,因此您始终可以获得第一个的值。

我建议摆脱<input>并将product.id的值附加到按钮本身(或者确切地说是<input type="submit">)。这是更具描述性的解释:How can I build multiple submit buttons django form?

另一种方法是将代码更改为具有多个表单,例如:

{% for product in products %}
    <form method="POST">
        {% csrf_token %}
        {{ product.name }}
        <br/>
        <button>Add to Basket</button>
        {{ product.id }}
        <input type="hidden" name='product_id' value='{{ product.id }}'>
    </form>
    <br/>
{% endfor %}
© www.soinside.com 2019 - 2024. All rights reserved.