Как передать контекст (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-шаблон, пожалуйста, подскажите, как я могу это сделать, чтобы дать пользователю подсказку о формате даты.

Вернуться на верх