Seamless integration between Django REST framework and Datatables.
Switch branches/tags
Clone or download



Travis build codecov-image Documentation Status Pypi version Python versions


This package provides seamless integration between Django REST framework and Datatables.

Install django-rest-framework-datatables, call your API with ?format=datatables and it will return a JSON structure that is fully compatible with what Datatables expects. It handles searching, filtering, ordering and most usecases you can imagine with Datatables.

The great benefit of django-rest-framework-datatables is that you don't have to create a different API, your API still work exactly the same unless you specify the datatables format on your request.

Full documentation is available on Read the Docs !


  • Python (2.7, 3.4, 3.5, 3.6)
  • Django (1.9, 1.10, 1.11, 2.0, 2.1)
  • Django REST Framework (3.5, 3.6, 3.7, 3.8, 3.9)



Just use pip:

$ pip install djangorestframework-datatables


To enable Datatables support in your project, add 'rest_framework_datatables' to your INSTALLED_APPS, and modify your REST_FRAMEWORK settings like this:

    'DEFAULT_PAGINATION_CLASS': 'rest_framework_datatables.pagination.DatatablesPageNumberPagination',
    'PAGE_SIZE': 50,

And that's it !

Your API is now fully compatible with Datatables and will provide searching, filtering, ordering and pagination without any modification of your API code !

Always Serialize Specific Fields

Sometimes you may want to expose fields regardless of datatable's url parameters. You can do so by setting the datatables_always_serialize tuple like so:

class ArtistSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(read_only=True)

class Meta:
    model = Artist
    fields = (
        'id', 'name',
    datatables_always_serialize = ('id',)

An example of Datatable

<!doctype html>
<html lang="en">
  <meta charset="utf-8">
  <title>Rolling Stone Top 500 albums of all time</title>
  <link rel="stylesheet" href="//">
  <link rel="stylesheet" href="//">

  <div class="container">
    <div class="row">
      <div class="col-sm-12">
        <table id="albums" class="table table-striped table-bordered" style="width:100%">
              <th>Album name</th>
  <script src="//"></script>
  <script src="//"></script>
  <script src="//"></script>
      $(document).ready(function() {
          var table = $('#albums').DataTable({
              "serverSide": true,
              "ajax": "/api/albums/?format=datatables",
              "columns": [
                  {"data": "rank", "searchable": false},
                  {"data": "artist_name", "name": ""},
                  {"data": "name"},
                  {"data": "year"},
                  {"data": "genres", "name": "", "sortable": false},

Example project

To play with the example project, just clone the repository and run the dev server.

$ git clone
$ cd django-rest-framework-datatables
$ pip install requirements.txt
$ python example/ runserver
$ firefox


Install development requirements.

$ pip install -r requirements-dev.txt

Run the tests.

$ python example/ test

You can also use the excellent tox testing tool to run the tests against all supported versions of Python and Django. Install tox globally, and then simply run:

$ tox

If you want to check the coverage, use:

$ coverage run ./example/ test
$ coverage report -m


The documentation is available online on Read the Docs.

To build the documentation, you’ll need to install sphinx.

$ pip install -r requirements-docs.txt

To build the documentation:

$ cd docs
$ make clean && make build