django-advanced-filters icon indicating copy to clipboard operation
django-advanced-filters copied to clipboard

builtins.AttributeError: 'AdvancedFilterQueryForm' object has no attribute 'cleaned_data'

Open boatcoder opened this issue 2 years ago • 2 comments

Describe the bug Throws an exception when I try to save and filter a super simple filter Stacktrace below

To Reproduce Steps to reproduce the behavior:

  1. built filter like this. self.advanced_filter_fields = [field.name for field in self.model._meta.fields]
  2. Opened admin advanced Filter
  3. Put in values (see screenshot)
  4. Clicked save and filter

Expected behavior Doesn't blow up

Screenshots Screen Shot 2022-03-29 at 5 18 46 PM

Details (please complete the following information):

  • OS: MacOS 12.2.1 (21D62)
  • Python version 3.10.2
  • Django version (3, 2, 12, 'final', 0)
  • django-advanced-filters version 1.4.0
  • Browser Chrome but not important
  • Version Version 99.0.4844.84 (Official Build) (arm64)

Additional context

File "/opt/homebrew/Cellar/[email protected]/3.10.2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/threading.py", line 966, in _bootstrap
  self._bootstrap_inner()
File "/opt/homebrew/Cellar/[email protected]/3.10.2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/threading.py", line 1009, in _bootstrap_inner
  self.run()
File "/opt/homebrew/Cellar/[email protected]/3.10.2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/threading.py", line 946, in run
  self._target(*self._args, **self._kwargs)
File "/opt/homebrew/Cellar/[email protected]/3.10.2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/socketserver.py", line 683, in process_request_thread
  self.finish_request(request, client_address)
File "/opt/homebrew/Cellar/[email protected]/3.10.2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/socketserver.py", line 360, in finish_request
  self.RequestHandlerClass(request, client_address, self)
File "/opt/homebrew/Cellar/[email protected]/3.10.2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/socketserver.py", line 747, in __init__
  self.handle()
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/core/servers/basehttp.py", line 178, in handle
  self.handle_one_request()
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/core/servers/basehttp.py", line 201, in handle_one_request
  handler.run(self.server.get_app())
File "/opt/homebrew/Cellar/[email protected]/3.10.2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/wsgiref/handlers.py", line 137, in run
  self.result = application(self.environ, self.start_response)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/contrib/staticfiles/handlers.py", line 76, in __call__
  return self.application(environ, start_response)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/core/handlers/wsgi.py", line 133, in __call__
  response = self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/core/handlers/base.py", line 130, in get_response
  response = self._middleware_chain(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/core/handlers/exception.py", line 47, in inner
  response = get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/debug_toolbar/middleware.py", line 57, in __call__
  response = toolbar.process_request(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/debug_toolbar/panels/__init__.py", line 193, in process_request
  return self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/debug_toolbar/panels/__init__.py", line 193, in process_request
  return self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/debug_toolbar/panels/timer.py", line 65, in process_request
  return super().process_request(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/debug_toolbar/panels/__init__.py", line 193, in process_request
  return self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/debug_toolbar/panels/__init__.py", line 193, in process_request
  return self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/debug_toolbar/panels/headers.py", line 50, in process_request
  return super().process_request(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/debug_toolbar/panels/__init__.py", line 193, in process_request
  return self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/debug_toolbar/panels/__init__.py", line 193, in process_request
  return self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/debug_toolbar/panels/__init__.py", line 193, in process_request
  return self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/debug_toolbar/panels/staticfiles.py", line 117, in process_request
  return super().process_request(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/debug_toolbar/panels/__init__.py", line 193, in process_request
  return self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/debug_toolbar/panels/__init__.py", line 193, in process_request
  return self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/debug_toolbar/panels/__init__.py", line 193, in process_request
  return self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/debug_toolbar/panels/__init__.py", line 193, in process_request
  return self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/debug_toolbar/panels/logging.py", line 77, in process_request
  return super().process_request(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/debug_toolbar/panels/__init__.py", line 193, in process_request
  return self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/core/handlers/exception.py", line 47, in inner
  response = get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/utils/deprecation.py", line 117, in __call__
  response = response or self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/core/handlers/exception.py", line 47, in inner
  response = get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/utils/deprecation.py", line 117, in __call__
  response = response or self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/core/handlers/exception.py", line 47, in inner
  response = get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/utils/deprecation.py", line 117, in __call__
  response = response or self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/core/handlers/exception.py", line 47, in inner
  response = get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/utils/deprecation.py", line 117, in __call__
  response = response or self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/core/handlers/exception.py", line 47, in inner
  response = get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/utils/deprecation.py", line 117, in __call__
  response = response or self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/core/handlers/exception.py", line 47, in inner
  response = get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/utils/deprecation.py", line 117, in __call__
  response = response or self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/core/handlers/exception.py", line 47, in inner
  response = get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/utils/deprecation.py", line 117, in __call__
  response = response or self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/core/handlers/exception.py", line 47, in inner
  response = get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/utils/deprecation.py", line 117, in __call__
  response = response or self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/core/handlers/exception.py", line 47, in inner
  response = get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/utils/deprecation.py", line 117, in __call__
  response = response or self.get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/core/handlers/exception.py", line 49, in inner
  response = response_for_exception(request, exc)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/core/handlers/exception.py", line 115, in response_for_exception
  log_response(
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/utils/log.py", line 224, in log_response
  getattr(logger, level)(
File "/opt/homebrew/Cellar/[email protected]/3.10.2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/logging/__init__.py", line 70, in error
File "/opt/homebrew/Cellar/[email protected]/3.10.2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/logging/__init__.py", line 1904, in _LogErrorReplacement
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/core/handlers/exception.py", line 47, in inner
  response = get_response(request)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/core/handlers/base.py", line 181, in _get_response
  response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/contrib/admin/options.py", line 616, in wrapper
  return self.admin_site.admin_view(view)(*args, **kwargs)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/utils/decorators.py", line 130, in _wrapped_view
  response = view_func(request, *args, **kwargs)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func
  response = view_func(request, *args, **kwargs)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/contrib/admin/sites.py", line 232, in inner
  return view(request, *args, **kwargs)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/advanced_filters/admin.py", line 102, in changelist_view
  response = self.save_advanced_filter(request, form)
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/advanced_filters/admin.py", line 65, in save_advanced_filter
  if form.is_valid():
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/forms/forms.py", line 175, in is_valid
  return self.is_bound and not self.errors
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/forms/forms.py", line 170, in errors
  self.full_clean()
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/forms/forms.py", line 373, in full_clean
  self._clean_form()
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/forms/forms.py", line 400, in _clean_form
  cleaned_data = self.clean()
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/advanced_filters/forms.py", line 309, in clean
  if not self.fields_formset.is_valid():
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/forms/formsets.py", line 321, in is_valid
  self.errors
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/forms/formsets.py", line 304, in errors
  self.full_clean()
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/forms/formsets.py", line 362, in full_clean
  if self.can_delete and self._should_delete_form(form):
File "/Users/mark/.virtualenvs/dubclub/lib/python3.10/site-packages/django/forms/formsets.py", line 314, in _should_delete_form
  return form.cleaned_data.get(DELETION_FIELD_NAME, False)

builtins.AttributeError: 'AdvancedFilterQueryForm' object has no attribute 'cleaned_data'

boatcoder avatar Mar 29 '22 23:03 boatcoder

I've got the same issue with the same tback

  • OS: MacOS 12.3.1 arm64
  • Python version 3.9.12
  • Django version 3.2.13
  • django-advanced-filters version 1.4.0
  • Firefox 100

jvacek avatar May 12 '22 16:05 jvacek

There is a PR #153

tuffnatty avatar May 29 '22 12:05 tuffnatty

Just looking at the screenshot, this looks like this is caused by an empty option being allowed to pass validation. Is it true that this used to work well in older versions? What used to happen then?

EDIT: this is possibly a duplicate of #141, however it's not very clear what is the desired behaviour (or what used to happen in Django < 3.2)

asfaltboy avatar Sep 25 '22 09:09 asfaltboy