{"id":21182,"library":"drf-excel","title":"DRF Excel Renderer","description":"Django REST Framework renderer for generating Excel spreadsheet (.xlsx) files from DRF responses using OpenPyXL. Current version 2.5.3, requires Python >=3.9, DRF >=3.14. Release cadence: irregular, with maintenance updates and occasional bug fixes.","status":"active","version":"2.5.3","language":"python","source_language":"en","source_url":"https://github.com/django-commons/drf-excel","tags":["django","django-rest-framework","excel","openpyxl","renderer"],"install":[{"cmd":"pip install drf-excel","lang":"bash","label":"Install from PyPI"}],"dependencies":[{"reason":"Required, version >=3.14","package":"djangorestframework","optional":false},{"reason":"Required for Excel generation","package":"openpyxl","optional":false}],"imports":[{"note":"Wrong import path; module is drf_excel.renderers","wrong":"from drf_excel import XLSXFileRenderer","symbol":"XLSXFileRenderer","correct":"from drf_excel.renderers import XLSXFileRenderer"},{"note":"","wrong":"","symbol":"XLSXMixin","correct":"from drf_excel.mixins import XLSXMixin"}],"quickstart":{"code":"from rest_framework import viewsets\nfrom drf_excel.renderers import XLSXFileRenderer\nfrom drf_excel.mixins import XLSXMixin\nfrom myapp.models import MyModel\nfrom myapp.serializers import MySerializer\n\nclass MyViewSet(XLSXMixin, viewsets.ModelViewSet):\n    queryset = MyModel.objects.all()\n    serializer_class = MySerializer\n    renderer_classes = [XLSXFileRenderer]\n    filename = 'my_export.xlsx'\n    \n    def get_queryset(self):\n        # Add filtering if needed\n        return super().get_queryset().filter(is_active=True)","lang":"python","description":"Basic usage: mixin + renderer, minimal setup."},"warnings":[{"fix":"Upgrade to DRF >=3.14 and replace NullBooleanField with BooleanField(null=True).","message":"Version 2.2.0 removed NullBooleanField and requires DRF >=3.14. Upgrade from older versions may break if using NullBooleanField or older DRF.","severity":"breaking","affected_versions":"<2.2.0"},{"fix":"Disable pagination for the export endpoint, or override list() to return the entire queryset.","message":"Pagination can break the renderer if your view uses pagination. The renderer expects the full list, not a paginated response.","severity":"gotcha","affected_versions":"all"},{"fix":"Upgrade to drf-excel >=2.4.0 for lazy translation support.","message":"If you use `_lazy` translations in serializer fields, they may not be rendered correctly in Excel without special handling.","severity":"gotcha","affected_versions":"<2.4.0"}],"env_vars":null,"last_verified":"2026-04-27T00:00:00.000Z","next_check":"2026-07-26T00:00:00.000Z","problems":[{"fix":"Ensure the view correctly returns an XLSX response; use XLSXMixin and renderer_classes correctly.","cause":"Attempting to access sheet properties after rendering without creating the workbook properly.","error":"'NoneType' object has no attribute 'sheet'"},{"fix":"Replace 'from drf_excel import XLSXFileRenderer' with 'from drf_excel.renderers import XLSXFileRenderer'.","cause":"Importing from wrong module; correct import path is from drf_excel.renderers.","error":"ImportError: cannot import name 'XLSXFileRenderer' from 'drf_excel'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}