Skip to main content

Seamless integration between Django REST framework and Datatables (https://datatables.net) with supporting Datatables editor

Project description

django-rest-framework-datatables-editor

Build codecov-image Documentation Status Pypi version Python versions Django versions

Overview

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

  • It handles searching, filtering, ordering and most usecases you can imagine with Datatables.

  • You don’t have to create a different API, your API still work exactly the same .

How to use

Install

$ pip install djangorestframework-datatables-editor

If you need the functionality of the editor, you also need to download the data editor from here, the JS+CSS version, and put the downloaded files in static folder.

Configuration

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

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
        'rest_framework_datatables_editor.renderers.DatatablesRenderer',
    ),
    'DEFAULT_FILTER_BACKENDS': (
        'rest_framework_datatables_editor.filters.DatatablesFilterBackend',
    ),
    'DEFAULT_PAGINATION_CLASS': 'rest_framework_datatables_editor.pagination.DatatablesPageNumberPagination',
    'PAGE_SIZE': 50,
}

For using Datatables editor you should use DatatablesEditorModelViewSet instead ModelViewSet or add EditorModelMixin to your views.

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 ! For using Datatables editor you should use DatatablesEditorModelViewSet instead ModelViewSet or add EditorModelMixin to your views.

Configuring Datatables and Datatables editor

  • The URL for connecting datatables is the URL of your view with ?format=datatables

  • The URL connecting datatables editor is the URL of your view with editor/

  • Full documentation is available on Read the Docs !

  • Also you’ll need download Datatables editor.

Example of HTML code:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Rolling Stone Top 500 albums of all time</title>
    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.css">
    <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/dataTables.bootstrap4.min.css">
    <link rel="stylesheet" href="https://cdn.datatables.net/buttons/1.5.6/css/buttons.bootstrap4.min.css">
    <link rel="stylesheet" href="https://cdn.datatables.net/select/1.3.0/css/select.bootstrap4.min.css">
    <link rel="stylesheet" href="/static/css/editor.bootstrap4.min.css">
</head>
<body>
    <div class="container" style="font-size: .9em;">
        <div class="row">
            <div class="col-sm-12">
                <table id="albums" class="table table-striped table-bordered" style="width:100%">
                    <thead>
                    <tr>
                        <th>Rank</th>
                        <th>Artist</th>
                        <th>Album name</th>
                        <th>Year</th>
                        <th>Genres</th>
                    </tr>
                    </thead>
                </table>
            </div>
        </div>
    </div>
    <script src="//code.jquery.com/jquery-3.3.1.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/js/bootstrap.min.js"></script>
    <script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
    <script src="https://cdn.datatables.net/1.10.19/js/dataTables.bootstrap4.min.js"></script>
    <script src="https://cdn.datatables.net/buttons/1.5.6/js/dataTables.buttons.min.js"></script>
    <script src="https://cdn.datatables.net/buttons/1.5.6/js/buttons.bootstrap4.min.js"></script>
    <script src="https://cdn.datatables.net/select/1.3.0/js/dataTables.select.min.js"></script>
    <script src="/static/js/dataTables.editor.js"></script>
    <script src="/static/js/editor.bootstrap4.min.js"></script>
    <script>
        $(document).ready(function () {
            editor = new $.fn.dataTable.Editor({
                ajax: "/api/albums/editor/?format=datatables",
                table: "#albums",
                fields: [{
                    label: "rank",
                    name: "rank",
                }, {
                    label: "artist:",
                    name: "artist.id",
                    type: "select"
                }, {
                    label: "name:",
                    name: "name",
                }, {
                    label: "year:",
                    name: "year",
                }]
            });
            var table = $('#albums').DataTable({
                "serverSide": true,
                dom: "Bfrtip",
                "ajax": "/api/albums/?format=datatables",
                "columns": [
                    {"data": "rank", "searchable": false},
                    {"data": "artist.name", "name": "artist.name"},
                    {"data": "name"},
                    {"data": "year"},
                    {"data": "genres", "name": "genres.name", "sortable": false},
                ],
                select: true,
                buttons: [
                    {extend: "create", editor: editor},
                    {extend: "edit", editor: editor},
                    {extend: "remove", editor: editor}
                ]
            });
            table.buttons().container()
                .appendTo($('.col-md-6:eq(0)', table.table().container()));
        });
    </script>
</body>
</html>

Thanks

The project is based on the project django-rest-framework-datatables by David Jean Louis

Requirements

  • Python (2.7, 3.4, 3.5, 3.6, 3.7, 3.8)

  • Django (1.9, 1.11, 2.0, 2.1, 2.2, 3.0)

  • Django REST Framework (3.9, 3.10, 3.11)

Example project

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

$ git clone https://github.com/VVyacheslav/DRF-datatables-editor.git
$ cd DRF-datatables-editor
Activate virtualenv.
$ pip install -r requirements-dev.txt
$ python example/manage.py runserver
$ firefox http://127.0.0.1:8000

Testing

Install development requirements.

$ pip install -r requirements-dev.txt

Run the tests.

$ python example/manage.py 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/manage.py test
$ coverage report -m

Changelog

Version 0.3.3 (2020-05-17):

  • Added support for Django 3.0

Version 0.3.2 (2019-05-23):

  • Fixed checking fields when deleting

Version 0.3.1 (2019-05-22):

  • Fixed requirements

Version 0.3.0 (2019-05-06):

  • Added checking of the writable fields of Datatables Editor passed to Django

  • Added information about CSRF authorization to the documentation

Version 0.2.1 (2019-04-29):

  • Added documentation

Version 0.2.0 (2019-04-20):

  • Added tests for editor functionality

Version 0.1.0 (2019-04-15):


Version 0.5.0 (2019-03-31):

The changelog bellow is the changelog of django-rest-framework-datatables by David Jean Louis)

  • Fixed total number of rows when view is using multiple filter back-ends

  • New meta option datatables_extra_json on view for adding key/value pairs to rendered JSON

  • Minor docs fixes

Version 0.4.1 (2018-11-16):

  • Added support for Django 2.1 and DRF 3.9

  • Updated README

Version 0.4.0 (2018-06-22):

  • Added top level filtering for nested serializers

  • Added multiple field filtering

  • Added a ?keep= parameter that allows to bypass the filtering of unused fields

  • Better detection of the requested format

  • Fixed typo in Queryset.count() method name

Version 0.3.0 (2018-05-11):

  • Added a serializer Meta option datatables_always_serialize that allows to specify a tuple of fields that should always be serialized in the response, regardless of what fields are requested in the Datatables request

  • Optimize filters

  • Use AND operator for column filtering instead of OR, to be consistant with the client-side behavior of Datatables

Version 0.2.1 (2018-04-11):

  • This version replaces the 0.2.0 who was broken (bad setup.py)

Version 0.2.0 (2018-04-11):

  • Added full documentation

  • Removed serializers, they are no longer necessary, filtering of columns is made by the renderer

Version 0.1.0 (2018-04-10):

Initial release.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Built Distribution

File details

Details for the file djangorestframework-datatables-editor-0.3.3.tar.gz.

File metadata

  • Download URL: djangorestframework-datatables-editor-0.3.3.tar.gz
  • Upload date:
  • Size: 12.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2

File hashes

Hashes for djangorestframework-datatables-editor-0.3.3.tar.gz
Algorithm Hash digest
SHA256 735b66a574694fcf958a58a364fd070c18866c3ac845f96490ac648858415465
MD5 da129697db47ecb9c66cd810ca2a9fdc
BLAKE2b-256 0c9047f0f3e104e64c9f6332e7bddb761f97e8765d7f94fa5385ffb2693e737b

See more details on using hashes here.

File details

Details for the file djangorestframework_datatables_editor-0.3.3-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for djangorestframework_datatables_editor-0.3.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 9c688a553e4d0c78324969b695ecd7cfcb8903edd57c2d462f9eb17966daa7e0
MD5 49c1f931406436c6697ec9baab702de8
BLAKE2b-256 259e9d0ed628d1575e56bef9b549fd46a57a161d28be5aa11680120709835545

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page