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:
parent
c3d5160e61
commit
0cccbba694
2 changed files with 22 additions and 5 deletions
|
|
@ -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):
|
||||
|
|
|
|||
11
core/templates/autocomplete_filter.html
Normal file
11
core/templates/autocomplete_filter.html
Normal 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>
|
||||
Loading…
Reference in a new issue