{"id":8958,"library":"djangorestframework-datatables","title":"Django REST Framework Datatables","description":"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.","status":"active","version":"0.7.2","language":"python","source_language":"en","source_url":"https://github.com/izimobil/django-rest-framework-datatables","tags":["django","rest-framework","datatables","drf","api","pagination","filtering","sorting"],"install":[{"cmd":"pip install djangorestframework-datatables","lang":"bash","label":"Install with pip"}],"dependencies":[{"reason":"Core framework dependency, version 3.2, 4.1, 4.2 supported.","package":"Django","optional":false},{"reason":"Core REST framework dependency, version 3.14 supported.","package":"djangorestframework","optional":false},{"reason":"Optional, for more fine-grained control over database queries and advanced filtering capabilities.","package":"django-filter","optional":true}],"imports":[{"wrong":"from rest_framework_datatables.renderers import DatatablesRenderer","symbol":"DatatablesRenderer","correct":"from rest_framework_datatables.renderers import DatatablesRenderer"}],"quickstart":{"code":"import os\nimport django\nfrom django.conf import settings\nfrom django.urls import path, include\nfrom django.db import models\nfrom rest_framework import serializers, viewsets, routers\n\nos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')\n\n# Minimal Django settings for demonstration\nif not settings.configured:\n    settings.configure(\n        INSTALLED_APPS=[\n            'django.contrib.admin',\n            'django.contrib.auth',\n            'django.contrib.contenttypes',\n            'django.contrib.sessions',\n            'rest_framework',\n            'rest_framework_datatables' # Add this line\n        ],\n        DATABASES={'default': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': ':memory:'}},\n        ROOT_URLCONF=__name__,\n        SECRET_KEY='a-very-secret-key',\n        REST_FRAMEWORK={\n            'DEFAULT_RENDERER_CLASSES': (\n                'rest_framework.renderers.JSONRenderer',\n                'rest_framework.renderers.BrowsableAPIRenderer',\n                'rest_framework_datatables.renderers.DatatablesRenderer', # Add this renderer\n            ),\n            'DEFAULT_FILTER_BACKENDS': (\n                'rest_framework_datatables.filters.DatatablesFilterBackend', # Add this filter backend\n            ),\n            'DEFAULT_PAGINATION_CLASS': 'rest_framework_datatables.pagination.DatatablesPageNumberPagination',\n            'PAGE_SIZE': 10,\n        }\n    )\n\ndjango.setup()\n\n# 1. Define a simple Django model\nclass Item(models.Model):\n    name = models.CharField(max_length=100)\n    value = models.IntegerField()\n\n    def __str__(self):\n        return self.name\n\n# 2. Define a DRF Serializer\nclass ItemSerializer(serializers.ModelSerializer):\n    class Meta:\n        model = Item\n        fields = ['id', 'name', 'value']\n\n# 3. Define a DRF ViewSet\nclass ItemViewSet(viewsets.ModelViewSet):\n    queryset = Item.objects.all()\n    serializer_class = ItemSerializer\n\n# 4. Register the ViewSet with a router\nrouter = routers.DefaultRouter()\nrouter.register(r'items', ItemViewSet)\n\n# 5. Define URL patterns\nurlpatterns = [\n    path('api/', include(router.urls)),\n]\n\n# Example usage (simulate data and API call)\nif __name__ == '__main__':\n    # Create some dummy data\n    Item.objects.create(name='Apple', value=10)\n    Item.objects.create(name='Banana', value=20)\n    Item.objects.create(name='Cherry', value=30)\n\n    print(\"Configuration done. Your API endpoint is '/api/items/'.\")\n    print(\"To get Datatables-compatible output, append '?format=datatables'.\")\n    print(\"Example API call: http://localhost:8000/api/items/?format=datatables\")\n    print(\"Start a Django dev server and navigate to the URL to see output.\")\n\n    # In a real Django project, you would run:\n    # python manage.py makemigrations\n    # python manage.py migrate\n    # python manage.py runserver\n","lang":"python","description":"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."},"warnings":[{"fix":"Always include `?format=datatables` in the AJAX URL configuration for your Datatables instance (e.g., `ajax: { url: '/api/mydata/?format=datatables' }`).","message":"Failing to append `?format=datatables` to your API URL when making requests from Datatables JavaScript will cause an 'Ajax error' in Datatables. The library requires this parameter to format the response correctly.","severity":"gotcha","affected_versions":"All"},{"fix":"Update imports from `rest_framework_datatables.filters` to `rest_framework_datatables.django_filters.backends` for `DatatablesFilterBackend` and `rest_framework_datatables.django_filters.filterset` for `DatatablesFilterSet`.","message":"When integrating with `django-filter`, the import paths for `DatatablesFilterBackend` and `DatatablesFilterSet` change to use the `django_filters` subpackage. Importing from the top-level `filters` module will not provide the enhanced functionality.","severity":"gotcha","affected_versions":"0.6.0+"},{"fix":"Ensure `data` attributes in Datatables column definitions correspond to your `Serializer` fields (e.g., `{'data': 'name', 'name': 'name'}` for a `name` field in the serializer).","message":"Column names in your Datatables JavaScript configuration (`data` or `name` properties) must exactly match the fields exposed by your DRF serializer. Mismatches lead to empty columns or 'Ajax error'.","severity":"gotcha","affected_versions":"All"}],"env_vars":null,"search_vec":"'0.7.2':41 'activ':44 'api':27,65 'automat':17 'current':38 'datat':4,15,34,63 'develop':45 'django':1,11,55,59 'drf':26,56,64 'endpoint':28 'filter':20,67 'format':33 'framework':3,13,62 'handl':18 'integr':9 'librari':37 'maintain':42 'newer':52 'order':21 'packag':6 'pagin':23,66 'paramet':35 'provid':7 'python':58 'regular':48 'request':30 'rest':2,12,61 'rest-framework':60 'seamless':8 'search':19 'sort':68 'status':46 'support':51 'updat':49 'version':40,53","created_at":"2026-04-16T18:47:44.390471+00:00","updated_at":"2026-04-16T18:47:44.390471+00:00","problems":{"verify_error":"Traceback (most recent call last):\n  File \"<string>\", line 1, in <module>\n  File \"/tmp/tmpl69h0sgn/venv/lib/python3.12/site-packages/rest_framework_datatables/renderers.py\", line 1, in <module>\n    from rest_framework.renderers import JSONRenderer\n  File \"/tmp/tmpl69h0sgn/venv/lib/python3.12/site-pa"},"ecosystem":"pypi","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":"0.7.2","cli_name":"","cli_version":null,"type":"library","homepage":null,"github":"https://github.com/izimobil/django-rest-framework-datatables","docs":null,"changelog":null,"pypi":"https://pypi.org/project/djangorestframework-datatables/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null,"categories":["web-framework","database"],"base_url":null,"auth_type":null,"provenance":{"verified_status":"import_fail","verified_at":"2026-07-03","last_verified":"2026-07-03","next_check":"2026-07-10","install_tag":null}}