无智者在劫难桃 2023-01-11 16:53 采纳率: 66.7%
浏览 17

django提交勾选的商品到订单页面数据打印信息显示为空关于问题。

django项目中,我想把购物车内勾选的商品的数据的id,用ajax传回视图函数,在视图函数用request.POST获取对应的id,并用此id搜索出在购物车数据库商品里面的信息勾选的商品的信息,用模板返回给提交订单页面并显示。

但是在pycharm调试传过来的值打印输出的时候不知道为什么最后总是多输出一个空的值。

img

控制台的post信息:

img

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的麻烦指明更正一下谢谢。

  • 写回答

1条回答 默认 最新

  • m0_54204465 2023-01-11 17:54
    关注

    看起来你的问题是你在获取购物车中勾选商品的ID,并在数据库中查找对应商品信息,但是最后在渲染的模板中输出的是空的。

    一个可能的原因是,在获取商品 ID 的过程中,你使用了 request.POST.getlist() 方法,它会返回一个列表。如果最终没有获取到任何商品 ID,那么这个列表就是空的。

    我建议你先打印出 goodsid 变量的值来查看它是否正确获取了商品 ID。如果是空的,那么可能是你传递数据时发生了问题。你可以尝试在请求中打印出请求的数据以更好的了解请求中包含的数据。另外可能的原因是你在视图中使用了 request.POST 方法。但是你在发送请求的时候没有指定请求方法,导致 request.POST 方法返回空的。

    建议检查你发送请求的方式是否正确,以及你是否在发送请求时指定了正确的请求方法。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月11日

悬赏问题

  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)
  • ¥15 船舶旋回实验matlab
  • ¥30 SQL 数组,游标,递归覆盖原值
  • ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
  • ¥20 gitlab 中文路径,无法下载
  • ¥15 用动态规划算法均分纸牌
  • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据