Пагинация на стороне сервера с данными с python REST API не работает должным образом - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь реализовать обработку serverSide для моего jquery данных, и это то, что я отправляю обратно из API:

{
  "data": {
    "Data": [
      { 
        "automated": false, 
        "date_added": "2020-01-10T08:55:56", 
        "dtime": null, 
        "end_time": null, 
        "id": 3768, 
      }, 
      {
        "automated": false, 
        "date_added": "2020-01-10T08:55:56", 
        "dtime": null, 
        "end_time": null, 
        "id": 3769,
      }, 
      {
        "automated": false, 
        "date_added": "2020-01-10T08:55:56", 
        "dtime": null, 
        "end_time": null, 
        "id": 3770, 
      }
     ], 
    "recordsFiltered": 166, 
    "recordsTotal": 166
  }
}

Как можно видеть, здесь происходит вложение. Теперь я пытаюсь сделать данные доступными, используя что-то следующим образом:

results_table = $('#results_table').DataTable({
                    processing: true,
                    serverSide: true,
                    ajax: {
                        url: `/api/v1/projects/results`,
                        dataSrc: function(json){
                                data = json.data.Data
                                recordsTotal = json.data.recordsTotal
                                recordsFiltered = json.data.recordsFiltered
                                return data;
                        }
                    },
                    columns: columns,
                    initComplete: tableInitComplete
                });
            }); 

Приведенный выше код просто я пытаюсь каким-то образом заставить 'recordsTotal' и 'recordsFiltered' приступить к работе. Я знаю, что я портю здесь. В результате, на моей веб-странице, хотя я вижу, что строки в таблице данных отображаются правильно, нумерация страниц страдает от проблемы, которая заключается в следующем: моя страница не отображает, сколько записей было выбрано, и говорит: «Показано с 0 по 0 из 0 записей (отфильтрованных по общему количеству записей NaN) и более, моя таблица данных не отображает фиксированное количество номеров страниц. Вместо этого я получаю что-то вроде

[1]->[2]->[3]...[]

Если я нажимаю на последнюю страницу без нумерации напрямую, я получаю ошибку. Если я получаю страницу за страницей, между ними бесконечное количество страниц.

Как мне это исправить? Я изменяю вложенную структуру данных, отправленных от AP? Вот как я создаю отправку данных из API:

results =  [row._asdict() for row in results]
result = {
            "Data": results,
            "recordsTotal" : 166,
            "recordsFiltered" : 166
        }

Я не понимал, как упаковать данные в правильном формате, поэтому вместо

{
  "recordsTotal" : 166,
  "recordsFiltered" : 166
   "data" : [
      {...}.
      {...}
    ]
}

у меня получилось

{
   "data": {
   "data" : [
      {...}.
      {...}
    ],
  "recordsTotal" : 166,
  "recordsFiltered" : 166
}
}

Если я не хочу изменять данные, возвращаемые из моего API, как мне получить доступ к «recordsTotal» и «recordsFiltered» и использовать их для устранения проблем, с которыми я сталкиваюсь? Спасибо.

1 Ответ

0 голосов
/ 13 января 2020

Ваш JSON необходимо вернуть в этом формате.

Пример JSON

{
  "draw": 1,
  "recordsTotal": 57,
  "recordsFiltered": 57,
  "data": [
    { 
        "automated": false, 
        "date_added": "2020-01-10T08:55:56", 
        "dtime": null, 
        "end_time": null, 
        "id": 3768, 
    }
  ]
}

Кроме того, вам не нужно писать dataSrc, поскольку Datatable позаботится об этих переменных автоматически.

Относительно вашего бесконечного нет страниц. Это потому, что ваши параметры не установлены или возвращены правильно.

Вы можете прочитать более подробную информацию здесь и посмотреть живую демонстрацию . Вы можете проверить запрос, чтобы увидеть, что передается в запросе, а что возвращается в ответе.

Отобразите поля соответственно и все должно работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...