html
<table id="tableBid" class="table table-striped table-bordered" cellspacing="0" width="100%"> <thead> <tr> <!--<th>Аватар</th>--> <th>Дата заявки</th> <th>Страница отправки сообщения</th> <th>Следующий шаг</th> <th>Дата шага</th> <th>Комментарий все</th> <th>Имя</th> <th>Телефон</th> <th>е-meil</th> </tr> </thead> </table>
JS
var oTable = $('#tableBid').dataTable({ "processing": true, //При подгрузке страницы показывать таблицу или нет "serverSide": true, // фильтрация на стороне сервера "oLanguage": { "sProcessing": "Подождите...", "sLengthMenu": "_MENU_ записей на странице", "sZeroRecords": "Записи отсутствуют.", "sInfo": "Записи с _START_ до _END_ из _TOTAL_ записей", "sInfoEmpty": "Записи с 0 до 0 из 0 записей", "sInfoFiltered": "(отфильтровано из _MAX_ записей)", "sInfoPostFix": "", "sSearch": "Поиск: ", "sUrl": "", "oPaginate": { "sFirst": "Первая", "sPrevious": "Предыдущая", "sNext": "Следующая", "sLast": "Последняя" }, }, "ajax": "{% url 'bid.all.json' %}"
urls
url(r'^table/json$', views.BidListView.as_view(), name='bid.all.json'), url(r'^filtrbid/$', views.BidListView.filter_queryset, name='bid.filtr.json'),
views
class BidListView(BaseDatatableView): model = bid columns = ['dataBid', 'site.url', 'status', 'dateStatus', 'comment', 'name', 'number', 'email', 'id'] order_columns = ['dataBid', 'site.url', 'status', 'dateStatus', 'comment', 'name', 'number', 'email'] max_display_length = 250 def filter_queryset(self, qs): if self.request.method == "POST": search = self.request.POST['sitesFiltr'] if search: qs = qs.filter(status=int(search)) return qs else: return qs return qs
ВОТ САМОЕ ГЛАВНОЕ, ВОТ ТАК ОТПРАВЛЯЮ ЗАПРОС НА ФИЛЬТРАЦИЮ И ОБНОВЛЯЮ ТАБЛИЦУ:
$.ajax({ url: "{% url 'bid.all.json' %}", type: 'POST', data: { //sitesFiltr: filtrFFF, }, dataType:"json", error: function(data) { oTable.fnClearTable(); oTable.fnAddData(data.data); }, // При успехе меняем информацию в шаблоне success: function(data){ oTable.fnClearTable(); oTable.fnAddData(data.data); }, // CSRF механизм защиты Django beforeSend: function(xhr, settings) { console.log('-------------before send--'); function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie != '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { // Only send the token to relative URLs i.e. locally. xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); } } });// ajax