Django admin list_filter - выпадающий виджет - PullRequest
0 голосов
/ 29 августа 2018

Я могу изменить list_filter связанного объекта на выпадающий. Проблема в том, когда я хочу фильтровать связанные объекты связанного объекта:

class Match(Model):
    team = models.ForeignKey('Team'...)
    away_team = ... (doesn't matter)

class Team(Model):
    country = models.ForeignKey('Country'...)

Когда я хочу отфильтровать Match объекты по Team, я делаю:

list_filter = ['team__country']

Для dropdown этого фильтра я использую https://github.com/mrts/django-admin-list-filter-dropdown:

 list_filter[('team',RelatedDropdownFilter)]

Когда я хочу отфильтровать Match объектов по Country их Team:

list_filter = ['team__country']

Но когда я хочу сделать выпадающий список из этого фильтра, он не работает:

list_filter = [('team__country',RelatedDropdownFilter)]

Выглядит так же, как не было указано RelatedDropdownFilter.

RelatedDropdownFilter

class RelatedDropdownFilter(RelatedFieldListFilter):
    template = 'django_admin_listfilter_dropdown/dropdown_filter.html'

Template

{% load i18n %}
<script type="text/javascript">var go_from_select = function(opt) { window.location = window.location.pathname + opt };</script>
<h3>{% blocktrans with title as filter_title %} By {{ filter_title }} {% endblocktrans %}</h3>
<ul class="admin-filter-{{ title|cut:' ' }}">
{% if choices|slice:"4:" %}
    <li>
    <select style="width: 95%;"
        onchange="go_from_select(this.options[this.selectedIndex].value)">
    {% for choice in choices %}
        <option{% if choice.selected %} selected="selected"{% endif %}
         value="{{ choice.query_string|iriencode }}">{{ choice.display }}</option>
    {% endfor %}
    </select>
    </li>
{% else %}

    {% for choice in choices %}
            <li{% if choice.selected %} class="selected"{% endif %}>
            <a href="{{ choice.query_string|iriencode }}">{{ choice.display }}</a></li>
    {% endfor %}

{% endif %}
</ul>

Вы знаете, что мне делать?

1 Ответ

0 голосов
/ 29 августа 2018

Ваш шаблон проверяет, существует ли более 4 вариантов:

{% if choices|slice:”4:” %}

Я предполагаю, что в просматриваемых тестовых данных не более четырех вариантов выбора.

Просто удалите эту проверку и всегда используйте <select> в этом блоке или добавьте больше тестовых данных. Выбор строится на основе существующих данных, а не просто включает все возможные значения.

...