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 <form>
中拥有的 <input>
标签与您展示的产品数量一样多。它们都具有相同的名称,因此您始终获得第一个的值。
我建议去掉<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 %
【讨论】:
以上是关于Django 为 post.request 获得正确的返回值的主要内容,如果未能解决你的问题,请参考以下文章
Django 为 post.request 获得正确的返回值