Как передать контекст (placeholder в моем случае) в django admin фильтру Simple List
Я создаю систему управления колледжем с возможностью хранения тестов на сайте и получения результатов работы студентов. Я хочу отфильтровать тесты на основе месяц-год, например, показать все тесты за март 2022 года.
Для этой цели я не могу показать все месяцы и годы в боковой панели, во первых это бесполезно, во вторых это займет много места и клиент будет вынужден много прокручивать страницу.
Итак, я создал пользовательский Simple Text Input, следуя некоторым блогам. Вот код этого общего фильтра:
class SimpleTextInputFilter(admin.SimpleListFilter):
template = 'admin/input_filter.html'
def filter(self, request, queryset, value):
raise NotImplementedError('Implement this method in subclasses.')
def queryset(self, request, queryset):
if self.value() is not None:
return self.filter(request, queryset, self.value())
def lookups(self, *args, **kwargs):
return None
def has_output(self):
return True
def choices(self, changelist):
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
А вот как я его использую:
class QuizMonthYearFilter(SimpleTextInputFilter):
parameter_name = 'date'
title = 'Quiz (Month Year)'
def filter(self, request, queryset, value):
try:
date = datetime.strptime(value, '%b %Y')
except:
pass
else:
return queryset.filter(date__year=date.year, date__month=date.month)
и 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 }}"
placeholder={{ **GET VALUE HERE** }}/>
{% if not all_choice.selected %}
<strong><a href="{{ all_choice.query_string }}">x {% trans 'Remove' %}</a></strong>
{% endif %}
</form>
{% endwith %}
</li>
</ul>
Теперь я хочу передать placeholder на вход фильтра. Поэтому я хочу передать контекстные данные в html-шаблон, пожалуйста, подскажите, как я могу это сделать, чтобы дать пользователю подсказку о формате даты.