2016-10-21 70 views
0

我有我的Django應用程序中的表中的複選框列表。用戶選擇其中一些,然後單擊一個操作按鈕。然後彈出一個小的彈出窗口模式表單,它們填充與選定項目相關的信息,並且還可以在彈出窗口中上傳文件。我需要通過AJAX將選定的複選框的ID和表單字段發送到Django通過Ajax發送複選框列表到Django

我已經將模式包裝在表單標籤中,並且一切正常。我正在努力將選定ID的列表發送給Django。當用戶選擇ID 31和32時,它將其作爲字符串「31,32」發送,而Django無法對其進行解碼。我相信這是一個快速修復,但我的JavaScript知識是有限的。

下面是我的代碼:

HTML:

<tr> 
    <td ><input class="selection-box" type="checkbox" name="action" value="{{ item.id }}"></td> 
    <td>...</td> 
</tr> 
<tr> 
    <td ><input class="selection-box" type="checkbox" name="action" value="{{ item.id }}"></td> 
    <td>...</td> 
</tr> 

的Javascript:

submitHandler: function() { 
    var matches = []; 
    $(".selection-box:checked").each(function() { 
     matches.push(this.value); 
    }); 
    var form = document.forms.namedItem("fileinfo");// This is the popup form that contains that file upload box and other fields 
    var oData = new FormData(form); 
    if (matches.length) { 
     oData.append('action', matches); 
    } 
    $.ajax({ 
     url: url, 
     processData: false, 
     contentType: false, 
     type: 'post', 
     data: oData, 
     success: function (data) { 
      if (data.success == true) { 
       location.reload(); 
      } 
     } 
    }); 
} 

Django的看法:

# This generates the error: ValueError: invalid literal for int() with base 10: '33,31' 
selected_list = self.request.POST.getlist('action') 
+0

print selected_list ?? – Mahi

+0

我無法打印它,因爲它會產生ValueError – Johan

+0

http://stackoverflow.com/a/5867262/3762142幫助... –

回答

1

因爲你是手工做的 '解碼' ,而不是我們荷蘭國際集團.getlist,你可以用.get.split去:

selected_list = self.request.POST.get('action', '').split(',') 

,但心裏有返回的list將包含ids爲字符串,所以你可以用map將它們轉換爲整數。

try: 
    cleaned_list = map(int, selected_list) 
except ValueError: 
    #list is empty: [''] 
    cleaned_list = [] 
+0

謝謝,我相信這會做到這一點,但沒有更好的方法來實現這一點?我只是發送'行動= 31和行動= 32'然後request.POST.getlist('行動')返回['31','32'] – Johan

+0

我不知道它的工作,但在JS中的其他地方嘗試而不是'oData.append('action',matches);'一次追加一個元素:'matches.forEach(function(match){oData.append('action',match)});' – Todor

+0

是,這工作!現在,當我在Django中使用諸如MyModel.objects.filter(pk__in = my_list)之類的查詢時,我唯一不確定的地方'my_list'是否必須是整數? – Johan