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">500g</li>
<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.00</em><br>共计<b class="countGood">0</b>件商品</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的麻烦指明更正一下谢谢。