【问题标题】:Ajax: post array of integers to DjangoAjax:将整数数组发布到 Django
【发布时间】:2011-12-15 00:32:51
【问题描述】:

我正在使用DataTables。我想让用户选择多行并删除它们。到目前为止,我已经让它工作了,所以它使用下面的代码删除了选择中的第一行。

Ajax 代码:

    /* Add a click handler for the delete row */
    $('#delete').click( function() {
        /* fnGetSelected returns an array of integers - each int is a db unique id */
        var anSelected = fnGetSelected( oTable );
        delete_url = '/delete/' + anSelected[0];               
        $.ajax({                  
              url: delete_url,
              type: 'GET',
          });
        oTable.fnDeleteRow( anSelected[0] ); 
        fnReloadAjax();
    } );

Django 代码:

@login_required
def delete(request, row_id):                          
     item = get_object_or_404(Items, pk=row_id, user=request.user)
     item.delete()

如何更新它以将所有行 ID 传递给 Django 后端?我想我需要发布 anSelected 数组,但不知道该怎么做。我需要什么 Django 代码来处理这个整数数组?

【问题讨论】:

    标签: jquery ajax django


    【解决方案1】:

    你可以试试这样的:

    $(function(){
        $.post("{% url delete %}", {"ids[]": anSelected}, function(res){
        if(res.ok){
            // remove rows from your table, maybe :)
            // oTable.fnDeleteRow(anSelected);
          }else{
            alert(res.errors); 
          } 
        });
    })
    

    在服务器上:

    @ajax_request
    def test(request):
        ids = request.POST.getlist("ids[]")
        try:
            Items.objects.filter(id__in=ids).delete()
        except:
            return {"ok": False, "errors": "your error"}
        return {"ok": True}
    

    @ajax_request 装饰器来自https://bitbucket.org/offline/django-annoying/wiki/Home,让您返回 json 响应。

    【讨论】:

    • POST.getlist 是这里的关键。有助于从表单生成的数组中获取 DJANGO 中的数据
    【解决方案2】:

    您需要使用simplejson.loads,例如,如果您将anSelected 数组作为arr 传递,您将使用类似的东西

    from django.utils import simplejson
    
    array = simplejson.loads(request.POST['arr'])
    try:
        ModelName.objects.filter(pk__in=array).delete()
    except:
        return HttpResponse(simplejson.dumps({'ok': False}))
    return HttpResponse(simplejson.dumps({'ok': True}))
    

    在您的 javascript 中,这些内容如下所示:

    $.post(
        '/delete/',
        {arr: anSelected},
        function(data){
            if(data.ok){
                //Everything went smoothly
            }else{
                //Something failed, you can send extra info from django like the name of the exception thrown if you'd want and display it
            }
        }
    );
    

    【讨论】:

    • 谢谢。我在 {arr: anSelected} 行收到“无效的属性 ID”错误。
    • 修改了我的代码,只是一个语法错误,因为额外的花括号:)
    猜你喜欢
    • 2013-08-05
    • 2012-10-04
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多