2011-10-25 64 views
3

我使用的是DataTables。我想让用户选择多行并删除它们。到目前为止,我已经使用它,所以它使用下面的代码删除了选择中的第一行。Ajax:将整数数组发送到Django

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代码来处理这个整数数组?

回答

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 
     } 
    } 
); 
+0

谢谢。 {arr:anSelected}行中出现“invalid property id”错误。 – FunLovinCoder

+0

修我的代码,只是一个语法错误,因为额外的花括号:) –

6

你可以尝试sometings这样的:

$(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响应。

+0

谢谢,这是有益的 – FunLovinCoder

+1

POST.getlist是这里的关键。有助于从阵列产生的阵列中获取DJANGO中的数据 –