Django-datatables Откуда второй запрос? - Python

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Django-datatables Откуда второй запрос?»

textual
Листинг программы
  1. class BidListView(BaseDatatableView):
  2.     model = bid
  3.     columns = ['dataBid', 'site.url', 'status', 'dateStatus', 'comment', 'name', 'number', 'email', 'id']
  4.     order_columns = ['dataBid', 'site.url', 'status', 'dateStatus', 'comment', 'name', 'number', 'email']
  5.     max_display_length = 250
  6.     def filter_queryset(self, qs):
  7.         if self.request.method == "POST":
  8.             search = self.request.POST['sitesFiltr']
  9.             if search:
  10.                 qs = qs.filter(status=int(search))
  11.         return qs

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут