django项目中,我想把购物车内勾选的商品的数据的id,用ajax传回视图函数,在视图函数用request.POST获取对应的id,并用此id搜索出在购物车数据库商品里面的信息勾选的商品的信息,用模板返回给提交订单页面并显示。
但是在pycharm调试传过来的值打印输出的时候不知道为什么最后总是多输出一个空的值。
控制台的post信息:
url:
# 子路由
urlpatterns = [
# url('^$', views.index,name='index'),
url('^get_checkedgoods$', views.get_checkedgoods, name='get_checkedgoods'),
]
view.py
def get_checkedgoods(request):
# 从session中获取当前用户的id
uid = request.session.get('user_id')
# 根据id搜索当前用户放入购物车中的品种
carts = CartInfo.objects.filter(user_id=uid)
# print(carts)
# 从数据库中获取用户相关信息
user = UserInfo.objects.get(id=request.session['user_id'])
phone = user.uphone[:3] + '****' + user.uphone[-4:]
# if True:
list = []
count = 0
post = request.POST
goodsid = post.getlist('checkId')
for id in goodsid:
carts2 = CartInfo.objects.get(goods_id=id)
list.append(carts2)
count = len(list)
print(list)
print(count)
context1 = {'title': '提交订单test',
'orders': 1,
'ushou': user.ushou,
'uaddress': user.uaddress,
'uyoubian': user.uyoubian,
'uphone': phone,
'carts': carts,
'carts2': list,
'count': count,
}
return render(request,'df_order/place_order2.html',context1)
用于显示勾选商品的订单信页面place_order.html:
{% for cart in carts2 %}
<ul class="goods_list_td clearfix" id="{{cart.id}}">
<li class="col01">{{ forloop.counter }}li>
<li class="col02"><img src="{{STATIC_URL}}{{cart.goods.gpic}}">li>
<li class="col03">{{cart.goods.gtitle}}li>
<li class="col04">{{cart.goods.gunit}}li>
<li class="col05" id = "price">{{cart.goods.gprice}}li>
<li class="col06" id = "count">{{cart.count}}li>
<li class="col07" id = "goodsum">li>
ul>
{% endfor %}
购物车cart.html
<form action="/order/get_checkedgoods" method="POST">
{% for cart in carts %}
<ul class="cart_list_td clearfix" id="{{cart.id}}" >
<li class="col01"><input type="checkbox" id="id" name="goodslist" value="{{cart.goods.id}}" >li>
<li class="col02"><img src="{{STATIC_URL}}{{cart.goods.gpic}}">li>
<li class="col03">{{cart.goods.gtitle}}<br><em>{{cart.goods.gunit}}em>li>
<li class="col04">500gli>
<li class="col05">{{cart.goods.gprice}}li>
<li class="col06">
<div class="num_add">
<a href="javascript:;" class="add fl">+a>
<input type="text" class="num_show fl" value="{{cart.count}}">
<a href="javascript:" class="minus fl">-a>
div>
li>
<li class="col07" id="total">li>
<li class="col08"><a href="javascript:cart_del({{cart.id}});">删除a>li>
ul>
{% endfor %}
<ul class="settlements">
<li class="col01"><input type="checkbox" name="select_all" >li>
<li class="col02">全选li>
<li class="col03">合计(不含运费):<span>¥span><em id="sumtotal">0.00em><br>共计<b class="countGood">0b>件商品li>
<li class="col04"><input href="" onclick="posttotal()" value="去结算">去结算input>>li>
ul>
form>
购物车提交勾选商品信息的js代码:
function posttotal(){
var sum = $('#sumtotal').text();
var checkId = [];
if(sum==0){
alert("提示:请在购物车内选择至少一件商品。")
}else{
$("input[name = 'goodslist']:checked").each(function(i){
checkId[i] = $(this).val();
});
$.ajax({
type: 'POST',
url: '/order/get_checkedgoods',
dataType: 'text',
data : {
'checkId' : checkId,
},
traditional: true,
success:function(data){
//alert(data);
console.log(checkId);
window.location.href ="/order/get_checkedgoods";
}
});
}
}
$.ajaxSetup({
data: {csrfmiddlewaretoken: '{{csrf_token}}'}
});
不知道哪里逻辑不对。有会django的麻烦指明更正一下谢谢。
看起来你的问题是你在获取购物车中勾选商品的ID,并在数据库中查找对应商品信息,但是最后在渲染的模板中输出的是空的。
一个可能的原因是,在获取商品 ID 的过程中,你使用了 request.POST.getlist() 方法,它会返回一个列表。如果最终没有获取到任何商品 ID,那么这个列表就是空的。
我建议你先打印出 goodsid 变量的值来查看它是否正确获取了商品 ID。如果是空的,那么可能是你传递数据时发生了问题。你可以尝试在请求中打印出请求的数据以更好的了解请求中包含的数据。另外可能的原因是你在视图中使用了 request.POST 方法。但是你在发送请求的时候没有指定请求方法,导致 request.POST 方法返回空的。
建议检查你发送请求的方式是否正确,以及你是否在发送请求时指定了正确的请求方法。