Django-datatables Откуда второй запрос? - Python
Формулировка задачи:
Добрый вечер! Суть ворпоса в заголовке. В двух словах. Я загружаю страницу и он загружает данные ajax-ом в таблицу. ПОсле я выбираю какие то фильтры делаю ajax на сервер, он там фильтрует и отдает обратно словарь. Тут все работает супер. Но как только я пробую переписать таблицу новыми данными, то сразу же делается еще запрос только как при загрузке страницы, который возвращает все данные, и таблица уже новым запросом перезаписывается. В общем, как его убрать??? Или как еше сделать фильтрацию??? Помогите пожалуйста, все доки и весь гугл уже сломал
html
JS
urls:
views:
ВОТ САМОЕ ГЛАВНОЕ, ВОТ ТАК ОТПРАВЛЯЮ ЗАПРОС НА ФИЛЬТРАЦИЮ И ОБНОВЛЯЮ ТАБЛИЦУ:
Листинг программы
- <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>
Листинг программы
- 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' %}"
Листинг программы
- url(r'^table/json$', views.BidListView.as_view(), name='bid.all.json'),
- url(r'^filtrbid/$', views.BidListView.filter_queryset, name='bid.filtr.json'),
Листинг программы
- 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
Решение задачи: «Django-datatables Откуда второй запрос?»
textual
Листинг программы
- 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д