2016-10-08 32 views
0

在HTML中,每個表單字段都需要一個name屬性才能提交給服務器。但我用dataTable來顯示所有的數據和分頁。列表複選框只是獲取當前頁面的數據而不能獲取下一頁或上一頁的數據。我如何獲得複選框的所有值?Django:如何從數據表中的複選框中獲取多個值

在模板

<input type="checkbox" name="orderId" value="{{ order_id }}" checked> 

並在視圖

order_list = request.POST.getlist('orderId') 
+0

確保'order_list'的類型是'list'。此外,你應該檢查你是使用單一表格的所有'複選框'輸入或多個表單,每個爲您當前的頁面。這裏所有的'複選框'輸入字段都應該以單一形式包含在期望的輸出中。 –

+0

是的,我確定只有單一的形式。我認爲在dataTable的分頁原因。例如:如果在我的表格中有2頁,當前頁面是1號,我提交表格,那麼'order_list'只接收頁碼1中複選框的值,並且沒有任何頁號2的值 –

+0

您是對的,當您瀏覽頁面時,在表格主體中僅包含當前頁面的行,因此,表單也只包含當前頁面的輸入字段。如果你知道Jquery或者Javascript,我可以向你推薦另一種方法來解決你的問題。 –

回答

1

可以使用包含字符串的隱藏輸入字段(類型隱藏)(逗號分隔值),其可以在以後是在服務器端以字符串形式接收,並且使用拆分方法進行拆分,這將導致期望的列表

<form> 
     <input id="result" type="hidden" name="result"> 
     <!--your data table goes here--> 
    </form> 

    <script> 
    $(document).ready(function(){ 
    var resultarray=[]; 
    $('form input:checkbox').on('change', function(){ 

     var orderValue=$(this).val(); 

    // if string already available then remove(uncheck operation) 
    if(resultarray.indexOf(orderValue)!=-1) 
    { 
     resultarray.splice(resultarray.indexOf(orderValue), 1); 
     } 
    else 
    { 
     //if sting is not available then add(check operation) 
     resultarray.push(orderValue); 
    } 

    var text=""; 
    for(x in resultarray) 
    { 
    text+=x+","; 
    //you may add an extra condition for not adding comma at last element 
    } 
    $("#result").val(text); 
    }); 
}); 

相關問題