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

Posted

技术标签:

【中文标题】Django 为 post.request 获得正确的返回值【英文标题】:Django getting right return value for post.request 【发布时间】:2018-07-26 20:32:11 【问题描述】:

我正在尝试使用 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>

【问题讨论】:

【参考方案1】:

您的问题是,您在 1 &lt;form&gt; 中拥有的 &lt;input&gt; 标签与您展示的产品数量一样多。它们都具有相同的名称,因此您始终获得第一个的值。

我建议去掉&lt;input&gt; 并将product.id 的值附加到按钮本身(或者确切地说是&lt;input type="submit"&gt;)。这是更具描述性的解释: 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 %

【讨论】:

以上是关于Django 为 post.request 获得正确的返回值的主要内容,如果未能解决你的问题,请参考以下文章

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

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

Django如何将POST保存到表单中?

request.POST和django表单中的字典数据有什么区别?

django入门 04 初探GET/POST 设计登录页面

如何在 Django 1.6 中使用 HTTP POST 请求接收 json 数据?