Django REST Framework Datatables

0.7.2 · active · verified Thu Apr 16

This package provides seamless integration between Django REST framework and Datatables. It automatically handles searching, filtering, ordering, and pagination for your DRF API endpoints when requested with the `?format=datatables` parameter. The library, currently at version 0.7.2, maintains an active development status with regular updates to support newer versions of Django, DRF, and Python.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates the core configuration for `djangorestframework-datatables`. It involves adding `rest_framework_datatables` to `INSTALLED_APPS`, and configuring `DEFAULT_RENDERER_CLASSES`, `DEFAULT_FILTER_BACKENDS`, and `DEFAULT_PAGINATION_CLASS` in your `REST_FRAMEWORK` settings. An example Django model, DRF serializer, and ViewSet are provided, along with the necessary URL routing.

import os
import django
from django.conf import settings
from django.urls import path, include
from django.db import models
from rest_framework import serializers, viewsets, routers

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

# Minimal Django settings for demonstration
if not settings.configured:
    settings.configure(
        INSTALLED_APPS=[
            'django.contrib.admin',
            'django.contrib.auth',
            'django.contrib.contenttypes',
            'django.contrib.sessions',
            'rest_framework',
            'rest_framework_datatables' # Add this line
        ],
        DATABASES={'default': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': ':memory:'}},
        ROOT_URLCONF=__name__,
        SECRET_KEY='a-very-secret-key',
        REST_FRAMEWORK={
            'DEFAULT_RENDERER_CLASSES': (
                'rest_framework.renderers.JSONRenderer',
                'rest_framework.renderers.BrowsableAPIRenderer',
                'rest_framework_datatables.renderers.DatatablesRenderer', # Add this renderer
            ),
            'DEFAULT_FILTER_BACKENDS': (
                'rest_framework_datatables.filters.DatatablesFilterBackend', # Add this filter backend
            ),
            'DEFAULT_PAGINATION_CLASS': 'rest_framework_datatables.pagination.DatatablesPageNumberPagination',
            'PAGE_SIZE': 10,
        }
    )

django.setup()

# 1. Define a simple Django model
class Item(models.Model):
    name = models.CharField(max_length=100)
    value = models.IntegerField()

    def __str__(self):
        return self.name

# 2. Define a DRF Serializer
class ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item
        fields = ['id', 'name', 'value']

# 3. Define a DRF ViewSet
class ItemViewSet(viewsets.ModelViewSet):
    queryset = Item.objects.all()
    serializer_class = ItemSerializer

# 4. Register the ViewSet with a router
router = routers.DefaultRouter()
router.register(r'items', ItemViewSet)

# 5. Define URL patterns
urlpatterns = [
    path('api/', include(router.urls)),
]

# Example usage (simulate data and API call)
if __name__ == '__main__':
    # Create some dummy data
    Item.objects.create(name='Apple', value=10)
    Item.objects.create(name='Banana', value=20)
    Item.objects.create(name='Cherry', value=30)

    print("Configuration done. Your API endpoint is '/api/items/'.")
    print("To get Datatables-compatible output, append '?format=datatables'.")
    print("Example API call: http://localhost:8000/api/items/?format=datatables")
    print("Start a Django dev server and navigate to the URL to see output.")

    # In a real Django project, you would run:
    # python manage.py makemigrations
    # python manage.py migrate
    # python manage.py runserver

view raw JSON →