如何在DataTables中启用排序(延迟加载)?

时间:2016-10-23 18:47:51

标签: javascript jquery datatables datatables-1.10

DataTables 1.10.12

排序对我的https://nodejs.org/api/modules.html#modules_caching实施不起作用。我使用延迟加载数据。

如何进行分类?

var hash_table = $('#hash_table');
var data_table = hash_table.DataTable({
  processing: true,
  serverSide: true,
  deferLoading: 100,
  ordering: true,
  order: [[ 0, 'asc' ]],
  ajax: {
    url: 'get_hashes/',
    type: 'POST',
  },
  columns: [
    {'title': 'BRC ID', 'data': 'brc_id'},
    {'title': 'HASH', 'data': 'hash'}
  ],
  dom: 'Brtip',
  buttons: [
    {
      extend: 'excel',
      title: 'report',
      text: 'Export',
      extension: '.xlsx'
    }
  ]
});
data_table.draw();

如果我点击列标题中的排序图标,结果就不会改变。

截图: DataTables

2 个答案:

答案 0 :(得分:1)

尝试在按钮元素之后添加这个,我使用它来对我们的数据表进行排序,数据表使用javascript覆盖数据库排序

"aaSorting": [  [1,'desc'],  [2,'desc'], [0,'desc'] ],

答案 1 :(得分:0)

对于延迟的DataTables,必须在服务器端执行排序。 Datatables插件仅将指令发送到服务器,通知排序顺序(asc, desc)和要排序的列的索引。 datatables protocol为此定义了两个特殊键:order[i][dir]order[i][column]

下面是一个Python函数示例,它找到用户单击和排序顺序的列的名称:

def get_sortable_coll_name(message):
    colls = {
        '1': 'date',
        '3': 'project',
        '4': 'project_id',
        '5': 'total_matches',
        '6': 'successful_matches',
        '7': 'failed_matches',
        '8': 'status'
    }   

    if message['order[0][dir]'] == 'asc':
        return '-' + colls[message['order[0][column]']]
    else:
        return colls[message['order[0][column]']]

然后,您可以在从Django模型中获取对象时进行排序:

sortable_coll = get_sortable_coll_name(message)
objects = Model.objects.filter(task=task).order_by(sortable_coll)