2016-10-08 2 views
0

В HTML для каждого поля формы требуется атрибут имени для отправки на сервер. Но я использовал dataTable для отображения всех данных и разбиения на страницы. Флажок списка позволяет получить данные текущей страницы не получать данные следующей страницы или предыдущей страницы. Как я могу получить все значения флажка?Django: Как получить несколько значений из флажков в dataTable

в шаблоне

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

и в представлении:

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

Убедитесь, что 'order_list' имеет тип 'list'. Также вы должны проверить, что вы используете единую форму для всех входов «checkbox» или нескольких форм, каждая для вашей текущей страницы. Здесь все поля ввода «checkbox» должны быть включены в одну форму для желаемого вывода. –

+0

Да, я уверен только в одной форме. Я думаю, причина в разбивке на страницы данных. Пример: если в моей таблице есть 2 страницы, текущая страница - номер 1, и я отправляю форму, тогда «order_list» просто получает значения флажка на странице №1 и не имеет значений страницы номер 2 –

+0

. Вы правы, когда вы перемещаетесь по страницам, в теле таблицы он содержит только строки текущей страницы, и из-за этого форма также содержит только поля ввода текущей страницы. Если вы знаете JQuery или Javascript, я могу предложить вам другой метод, который наверняка разрешит вашу проблему. –

ответ

1

Вы можете использовать скрытое поле ввода (тип скрыт), содержащий строку (разделенные запятой значения), который позже может быть полученный на стороне сервера как строка, и далее он разбивается с использованием метода split, который приведет к желаемому списку

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

Смежные вопросы