【问题标题】:how do I increase number of order detail without refreshing如何在不刷新的情况下增加订单详细信息的数量
【发布时间】:2022-01-19 16:34:54
【问题描述】:

我是 Django 的初学者,我创建结帐页面,当用户更改输入范围号时 enter image description here 它发送到服务器,但它适用于第一个 我想是因为我为所有输入设置了相同的 id 并且我无法更改它,因为它在标签中

我该如何解决?

Django 部分

class Ajax_Handler(View):
    def get(self,request):
        if request.is_ajax():            
          count=request.GET['count']
          return JsonResponse({'count':count},status=200) 


  

ajax部分

$(document).ready(function(){
            var crf=$('input[name=csrfmiddlewaretoken]').val();
            $("#icount").change(function(){
               $.ajax({
                   url:'/adding',
                   type:'get',
                   data:{
                       count:$('#icount').val(),
                       
                   },
                   success:function(respond){
                        $('#icount').val(respond.count)
                   }
               });

            });
       });
    

html部分

<tbody>
{% for order in order.orderdetail_set.all %}        
 <tr>
<td class="product-image">
 {% thumbnail order.product.image "100x100" crop="center" as im %}
<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
{% endthumbnail %}
</td>
<td class="product-name"><a href="products/{{order.product.id}}">{{order.product.title}}</a></td>
<td class="product-price">{{order.product.price|intcomma:False}}تومان</td>
                                            
<td class="product-quantity">                                          
<label>تعداد</label>
<input type="hidden" name="order_id{{order.id}}" value="{{order.id}}">
 <input name='count' id='icount' min="1" max="100" value="{{order.count}}" type="number">
                                                 
</td>
<td class="product-total">{{order.totalprice|intcomma:False}}</td>
<td class="product-remove"><a href="delete/{{order.id}}"><i class="fa fa-trash-o"></i></a></td>
</tr>
                                        
{% endfor %}
                                        
                                       
</tbody>

【问题讨论】:

    标签: python django ajax


    【解决方案1】:

    你可以这样做

    <input name='count' id='icount' min="1" max="100" value="{{order.count}}" type="number" onchange="handleOrderCount({{order.id}})">
    
    function handleOrderCount(OrderId){
        $.ajax({
            url:'/adding',
            type:'PUT',
            data:{
                'OrderId': OrderId,
                'csrfmiddlewaretoken': '{{ csrf_token }}',
                'count': $('#icount').val(),
            },
            success:function(respond){
                $('#icount').val(respond.count)
            }
            error:function(respond){
                console.log(respond)
            }
        });
    }
    

    如果您想更改数据库中的任何内容,请不要使用 GET 方法,它用于从数据库或服务器检索数据,请使用 PUT 更新任何对象

    POST - create
    GET - read
    @ 987654325@
    DELETE - delete
    在你看来,你可以得到这样的

    class Ajax_Handler(View):
        def get(self,request):
            if request.is_ajax() and request.method == "POST":            
              count = request.POST['count']
              # can filter object and update it like this 
              # order_id = request.POST['OrderId']
              # Order.object.filter(id=order_id)
              return JsonResponse({'count':count},status=200) 
    

    【讨论】:

    • 谢谢你,它对我有用,但我收到了 Forbidden csrf token 错误
    • 你在ajax调用中添加了这个'csrfmiddlewaretoken': '{{ csrf_token }}',
    • 已修复,感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 2014-04-24
    • 2015-06-27
    相关资源
    最近更新 更多