Skip to content

Incompatibility with django-filter #1468

@sanderdelfos

Description

@sanderdelfos

Describe the bug
The latest release of drf-spectacular (0.29) is incompatible with latest version of django-filter (25.2).

To Reproduce
Have a view with django-filter in use, open swagger page. More specifically, it seems TypedMultipleChoiceField is giving the issue. See the following error log:

  File "/usr/local/lib/python3.13/site-packages/drf_spectacular/views.py", line 84, in get
    return self._get_schema_response(request)
           ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/drf_spectacular/views.py", line 92, in _get_schema_response
    data=generator.get_schema(request=request, public=self.serve_public),
         ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/drf_spectacular/generators.py", line 287, in get_schema
    paths=self.parse(request, public),
          ~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/drf_spectacular/generators.py", line 258, in parse
    operation = view.schema.get_operation(
        path, path_regex, path_prefix, method, self.registry
    )
  File "/usr/local/lib/python3.13/site-packages/drf_spectacular/openapi.py", line 93, in get_operation
    parameters = self._get_parameters()
  File "/usr/local/lib/python3.13/site-packages/drf_spectacular/openapi.py", line 265, in _get_parameters
    **dict_helper(self._get_filter_parameters()),
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/local/lib/python3.13/site-packages/drf_spectacular/openapi.py", line 556, in _get_filter_parameters
    parameters += filter_extension.get_schema_operation_parameters(self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/usr/local/lib/python3.13/site-packages/drf_spectacular/contrib/django_filters.py", line 65, in get_schema_operation_parameters
    result += self.resolve_filter_field(
              ~~~~~~~~~~~~~~~~~~~~~~~~~^
        auto_schema, model, filterset_class, field_name, filter_field
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/local/lib/python3.13/site-packages/drf_spectacular/contrib/django_filters.py", line 90, in resolve_filter_field
    filter_choices = self._get_explicit_filter_choices(filter_field)
  File "/usr/local/lib/python3.13/site-packages/drf_spectacular/contrib/django_filters.py", line 233, in _get_explicit_filter_choices
    if filter_field.field.null_label:
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'TypedMultipleChoiceField' object has no attribute 'null_label'

Rollback to 0.28 solves the issue.

Expected behavior
Expect drf-spectacular to work out of the box with all filter types from django-filter.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions