philipn/django-rest-framework-filters

AttributeError: 'NoneType' object has no attribute 'override_filters'

iwaszko opened this issue · 1 comments

I might be doing something wrong but my setup seems very simple:

  • I'm using the latest version of django-rest-framework-filters (installed with pip from github, which also installs django-filter in version 2.0.0.dev1)
  • django-rest-framework version 3.8.2, django version 1.11.12
  • in settings, I have:
REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': [
        'rest_framework_filters.backends.RestFrameworkFilterBackend',
    ],
}

and for each ViewSet without filter_fields defined I'm getting the following error:

Traceback (most recent call last):
  File ".../python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File ".../python3.6/site-packages/django/core/handlers/base.py", line 217, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File ".../python3.6/site-packages/django/core/handlers/base.py", line 215, in _get_response
    response = response.render()
  File ".../python3.6/site-packages/django/template/response.py", line 107, in render
    self.content = self.rendered_content
  File ".../python3.6/site-packages/rest_framework/response.py", line 72, in rendered_content
    ret = renderer.render(self.data, accepted_media_type, context)
  File ".../python3.6/site-packages/rest_framework/renderers.py", line 724, in render
    context = self.get_context(data, accepted_media_type, renderer_context)
  File ".../python3.6/site-packages/rest_framework/renderers.py", line 701, in get_context
    'filter_form': self.get_filter_form(data, view, request),
  File ".../python3.6/site-packages/rest_framework/renderers.py", line 635, in get_filter_form
    html = backend().to_html(request, queryset, view)
  File ".../python3.6/site-packages/rest_framework_filters/backends.py", line 48, in to_html
    return super(RestFrameworkFilterBackend, self).to_html(request, queryset, view)
  File ".../python3.6/site-packages/django_filters/rest_framework/backends.py", line 60, in to_html
    filter_class = self.get_filter_class(view, queryset)
  File ".../python3.6/site-packages/rest_framework_filters/backends.py", line 36, in get_filter_class
    filter_class.override_filters = noop
AttributeError: 'NoneType' object has no attribute 'override_filters'

The get_filter_class method of DjangoFilterBackend class in django_filters/rest_framework/backends.py may actually return None in cases when filter_class and filter_fileds are both not defined.

Removed from 1.0 milestone for tidiness, as this is a master-only bug. This will be fixed in the release.