mrts / django-admin-list-filter-dropdown

Use dropdowns in Django admin list filter
MIT License
315 stars 48 forks source link

ProjectFilter' has no attribute 'split' #17

Closed Declic73 closed 4 years ago

Declic73 commented 5 years ago

Hello, when using a custom filter derived from admin.SimpleListFilter together with RelatedDropdownFilter and DropdownFilter I get an AttributeError: type object 'mycustomfilter' has no attribute 'split'. Any idea how to avoid this issue ? Thanks

mrts commented 5 years ago

Can you please provide a stack trace?

mikejcorey commented 5 years ago

Here's one: ''' Internal Server Error: /admin/parcels/owner/ Traceback (most recent call last): File "/home/michael/.pyenv/versions/who_owns/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/home/michael/.pyenv/versions/who_owns/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response response = self.process_exception_by_middleware(e, request) File "/home/michael/.pyenv/versions/who_owns/lib/python3.6/site-packages/django/core/handlers/base.py", line 124, in _get_response response = wrapped_callback(request, *callback_args, callback_kwargs) File "/home/michael/.pyenv/versions/who_owns/lib/python3.6/site-packages/django/contrib/admin/options.py", line 607, in wrapper return self.admin_site.admin_view(view)(*args, *kwargs) File "/home/michael/.pyenv/versions/who_owns/lib/python3.6/site-packages/django/utils/decorators.py", line 142, in _wrapped_view response = view_func(request, args, kwargs) File "/home/michael/.pyenv/versions/who_owns/lib/python3.6/site-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func response = view_func(request, *args, kwargs) File "/home/michael/.pyenv/versions/who_owns/lib/python3.6/site-packages/django/contrib/admin/sites.py", line 223, in inner return view(request, *args, *kwargs) File "/home/michael/.pyenv/versions/who_owns/lib/python3.6/site-packages/django/utils/decorators.py", line 45, in _wrapper return bound_method(args, kwargs) File "/home/michael/.pyenv/versions/who_owns/lib/python3.6/site-packages/django/utils/decorators.py", line 142, in _wrapped_view response = view_func(request, *args, **kwargs) File "/home/michael/.pyenv/versions/who_owns/lib/python3.6/site-packages/django/contrib/admin/options.py", line 1685, in changelist_view cl = self.get_changelist_instance(request) File "/home/michael/.pyenv/versions/who_owns/lib/python3.6/site-packages/django/contrib/admin/options.py", line 745, in get_changelist_instance sortable_by, File "/home/michael/.pyenv/versions/who_owns/lib/python3.6/site-packages/django/contrib/admin/views/main.py", line 80, in init self.queryset = self.get_queryset(request) File "/home/michael/.pyenv/versions/who_owns/lib/python3.6/site-packages/django/contrib/admin/views/main.py", line 359, in get_queryset filters_use_distinct) = self.get_filters(request) File "/home/michael/.pyenv/versions/who_owns/lib/python3.6/site-packages/django/contrib/admin/views/main.py", line 129, in get_filters field = get_fields_from_path(self.model, field_path)[-1] File "/home/michael/.pyenv/versions/who_owns/lib/python3.6/site-packages/django/contrib/admin/utils.py", line 487, in get_fields_from_path pieces = path.split(LOOKUP_SEP) AttributeError: type object 'BaseUseCodeListFilter' has no attribute 'split' '''

andreynovikov commented 4 years ago

@Declic73 you have to modify django_admin_listfilter_dropdown/filters.py:

from django.contrib.admin.filters import (
    SimpleListFilter,
    AllValuesFieldListFilter,
    ChoicesFieldListFilter,
    RelatedFieldListFilter, RelatedOnlyFieldListFilter
)

class SimpleDropdownFilter(SimpleListFilter):
    template = 'django_admin_listfilter_dropdown/dropdown_filter.html'

class DropdownFilter(AllValuesFieldListFilter):
    template = 'django_admin_listfilter_dropdown/dropdown_filter.html'

class ChoiceDropdownFilter(ChoicesFieldListFilter):
    template = 'django_admin_listfilter_dropdown/dropdown_filter.html'

class RelatedDropdownFilter(RelatedFieldListFilter):
    template = 'django_admin_listfilter_dropdown/dropdown_filter.html'

class RelatedOnlyDropdownFilter(RelatedOnlyFieldListFilter):
    template = 'django_admin_listfilter_dropdown/dropdown_filter.html'

then you should inherit your custom filter from SimpleDropdownFilter instead of admin.SimpleListFilter

mrts commented 4 years ago

@andreynovikov, many thanks for fixing this!