Skip to content

Instantly share code, notes, and snippets.

@hakib
Created December 9, 2017 08:37
Show Gist options
  • Save hakib/1491a848e71078dae81fca48c46cc258 to your computer and use it in GitHub Desktop.
Save hakib/1491a848e71078dae81fca48c46cc258 to your computer and use it in GitHub Desktop.
Django Admin InputFilter
# common/admin.py
class InputFilter(admin.SimpleListFilter):
template = 'admin/input_filter.html'
def lookups(self, request, model_admin):
# Dummy, required to show the filter.
return ((),)
def choices(self, changelist):
# Grab only the "all" option.
all_choice = next(super().choices(changelist))
all_choice['query_parts'] = (
(k, v)
for k, v in changelist.get_filters_params().items()
if k != self.parameter_name
)
yield all_choice
# common/templates/admin/input_filter.html
{% load i18n %}
<h3>{% blocktrans with filter_title=title %} By {{ filter_title }} {% endblocktrans %}</h3>
<ul>
<li>
{% with choices.0 as all_choice %}
<form method="GET" action="">
{% for k, v in all_choice.query_parts %}
<input type="hidden" name="{{ k }}" value="{{ v }}" />
{% endfor %}
<input type="text"
value="{{ spec.value|default_if_none:'' }}"
name="{{ spec.parameter_name }}"/>
{% if not all_choice.selected %}
<strong><a href="{{ all_choice.query_string }}">x {% trans 'Remove' %}</a></strong>
{% endif %}
</form>
{% endwith %}
</li>
</ul>
@hakib
Copy link
Author

hakib commented May 2, 2024

This will only have any effect if the user edited the URL, right?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment