django-advanced-filters
django-advanced-filters copied to clipboard
builtins.AttributeError: 'AdvancedFilterQueryForm' object has no attribute 'cleaned_data'
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:
- built filter like this.
self.advanced_filter_fields = [field.name for field in self.model._meta.fields]
- Opened admin advanced Filter
- Put in values (see screenshot)
- Clicked save and filter
Expected behavior Doesn't blow up
Screenshots
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'
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
There is a PR #153
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)