A minimal example using AjaxDatatableView.
How it works
An AjaxDatatableView-derived view describes the desired table content and behaviour as follows:
from ajax_datatable.views import AjaxDatatableView
from django.contrib.auth.models import Permission
class PermissionAjaxDatatableView(AjaxDatatableView):
model = Permission
title = 'Permissions'
initial_order = [["app_label", "asc"], ]
length_menu = [[10, 20, 50, 100, -1], [10, 20, 50, 100, 'all']]
search_values_separator = '+'
column_defs = [
AjaxDatatableView.render_row_tools_column_def(),
{'name': 'id', 'visible': False, },
{'name': 'codename', 'visible': True, },
{'name': 'name', 'visible': True, },
{'name': 'app_label', 'foreign_field': 'content_type__app_label', 'visible': True, },
{'name': 'model', 'foreign_field': 'content_type__model', 'visible': True, },
]
and is referenced in the template like so:
<div class="table-responsive">
<table id="datatable" width="100%" class="table table-striped table-bordered dt-responsive compact nowrap">
</table>
</div>
<script language="javascript">
$( document ).ready(function() {
AjaxDatatableViewUtils.initialize_table(
$('#datatable'),
"/ajax_datatable/permissions/",
{
// extra_options (example)
processing: false,
autoWidth: false,
full_row_select: true,
scrollX: false
}, {
// extra_data
// ...
},
);
});
</script>
where "/ajax_datatable_permissions/" is the endpoint to the previous view:
urlpatterns = [
...
path('ajax_datatable/permissions/', ajax_datatable_views.PermissionAjaxDatatableView.as_view(), name="ajax_datatable_permissions"),
...
]