【发布时间】:2019-10-17 03:59:38
【问题描述】:
我的 django 项目需要服务器端分页 + 单独的列搜索。可悲的是,我无法实现分页。
我搜索了很多工作示例,但没有找到。我想自己实现我的服务器端 api,有一些 django 应用程序,但它们似乎不再需要维护了。以下是我的数据表代码 + django 视图。这里有人可以给我一些建议吗?
var table = $('#mainTable').DataTable({
dom: 'Bfrtip',
responsive: true,
serverSide: true,
processing: true,
pageLength: 25,
buttons: [
'csv', 'print',
{
extend: 'colvis',
text: 'Spalten filtern',
columns: ':not(.noVis)'
},
],
ajax: {
url: '/akquise/mainTableData',
dataSrc: function ( json ) {
return json;
}
},
columnDefs: [
{ targets: [0,1,2,3,4,5,6,7,8,9], orderable: false},
{ targets: 0, className: "leadID", searchable: false },
{ targets: 3, className: "firmenname" },
],
columns: [
{ data: "leadID",
render: function ( data, type, row, meta ) {
button = '<a role="button" class="btn btn-secondary" target="_blank" href="details?leadID='+data+'"><i class="fas fa-search"></a>';
return button
}
},
{ data: "leadID"},
{ data: "status",
render: function ( data ) {
if(data == "Lead"){
return "<span class='badge badge-primary'>"+data+"</span>";
}
if(data == "Kunde"){
return "<span class='badge badge-info'>"+data+"</span>";
}
if(data == "Akquise"){
return "<span class='badge badge-warning'>"+data+"</span>";
}
if(data == "Lieferant"){
return "<span class='badge badge-success'>"+data+"</span>";
}
if(data == "Gesperrt"){
return "<span class='badge badge-danger'>"+data+"</span>";
}
}
},
{ data: "firmenname" },
{ data: "branche" },
{ data: "plz" },
{ data: "ort" },
{ data: "strasse" },
{ data: "telefon" },
{ data: "email" }
],
language: {
"url": "//cdn.datatables.net/plug-ins/1.10.19/i18n/German.json",
"decimal": ",",
}
})
def mainTableData(request):
search_values = []
fields = ['leadID', 'status', 'firmenname', 'branche', 'plz', 'ort', 'strasse', 'telefon', 'email']
for i in range(1, 10):
value = request.GET.get('columns['+str(i)+'][search][value]')
search_values.append(value)
allLeads = Lead.objects.filter(reduce(AND, (Q(**{fields[i]+'__icontains': value} ) for i, value in enumerate(search_values)))).values('leadID', 'status', 'firmenname', 'branche', 'plz', 'ort', 'strasse', 'telefon', 'email')
allLeads_list = list(allLeads)
return JsonResponse(allLeads_list, safe=False)
【问题讨论】:
标签: django datatables pagination