Features: 1) Add template attribute to BaseAutocompleteFilter for custom rendering; 2) Introduce autocomplete_filter.html template for enhanced filter display;

Fixes: 1) Correct parameter name value extraction to use `current` in `BaseAutocompleteFilter`;

Extra: 1) Refactor HTML rendering in `BaseAutocompleteFilter` for readability; 2) Add comments to explain purposes in the new template.
This commit is contained in:
Egor Pavlovich Gorbunov 2025-07-01 15:27:09 +03:00
parent c3d5160e61
commit 0cccbba694
2 changed files with 22 additions and 5 deletions

View file

@ -509,6 +509,8 @@ class AddressFilter(FilterSet):
class BaseAutocompleteFilter(SimpleListFilter):
template = "admin/autocomplete_filter.html"
def lookups(self, request, model_admin):
return ()
@ -516,14 +518,18 @@ class BaseAutocompleteFilter(SimpleListFilter):
url = reverse(
f"admin:{changelist.opts.app_label}_{self.parameter_name}_autocomplete"
)
qs = changelist.get_query_string(remove=[self.parameter_name])
val = changelist.params.get(self.parameter_name, "")
current = changelist.params.get(self.parameter_name, "")
html = (
f'<input type="hidden" class="django-autocomplete admin-autocomplete-filter" '
f'data-autocomplete-url="{url}" name="{self.parameter_name}" value="{val}"/>'
f'<input type="hidden" '
f'class="django-autocomplete admin-autocomplete-filter" '
f'data-autocomplete-url="{url}" '
f'name="{self.parameter_name}" '
f'value="{current}"/>'
)
# noinspection DjangoSafeString
yield {"query_string": qs, "display": mark_safe(html)}
yield {
"display": mark_safe(html),
}
class BrandAdminFilter(BaseAutocompleteFilter):

View file

@ -0,0 +1,11 @@
{% comment %}
A custom filter template that
only cares about our `display` key.
{% endcomment %}
<div class="module filter-{{ spec.parameter_name|slugify }}">
<h3>{{ spec.title }}</h3>
{% for choice in spec.choices cl %}
{{ choice.display|safe }}
{% endfor %}
</div>