Как улучшить фильтрацию в django admin?

#django #django-admin

Вопрос:

Я применил эту фильтрацию в своем администраторе. Но есть около 200 и гораздо более уникальных идентификаторов, которые отображаются справа.

Как я могу их ограничить? Есть ли лучший способ сделать это?

 @admin.register(Model)
class Model(admin.ModelAdmin):
    list_filter = ['my_unique_id']

 

Скриншот администратора
введите описание изображения здесь

Комментарии:

1. Не могли бы вы поделиться своей соответствующей моделью?

2. Возможно, вы захотите использовать search_fields=['my_unique_id'] вместо list_filter этого .

3. Это не дает мне список идентификаторов справа, я хочу что-то вроде разбиения на страницы в моем списке идентификаторов. Возможно ли это?

Ответ №1:

Если поле «my_unique_id» равно CharField, то вам следует использовать search_fields = [«my_unique_id»].

Если поле «my_unique_id» является внешним ключом, то вы можете использовать фильтр связанных полей и настроить шаблон.

Вы можете переопределить шаблон для выпадающего списка

related_dropdown_filter.html

 {% load i18n %}
<script type="text/javascript">var go_from_select = function(opt) { window.location = window.location.pathname   opt };</script>
<div class="dropDown-filter">
<h3>{% blocktrans with title as filter_title %} By {{ filter_title }} {% endblocktrans %}</h3>
<ul class="admin-filter-{{ title|cut:' ' }}">
{% if choices|slice:"1:" %}
    <li>
    <select class="form-control" style="width: 95%;margin-left: 2%;"
        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>
</div>
 
 from django.contrib.admin.filters import RelatedFieldListFilter

class RelatedDropdownFilter(RelatedFieldListFilter):
    template = 'related_dropdown_filter.html'


@admin.register(Model)
class Model(admin.ModelAdmin):
    list_filter = [('my_unique_id', RelatedDropdownFilter)]

 

Комментарии:

1. Но я все равно хочу увидеть список удостоверений личности с правой стороны. Я думал о том, чтобы, возможно, создать что-то вроде отдельной формы фильтрации

2. @Comrade49 Я отредактировал ответ. Вы можете настроить шаблон для выпадающего фильтра.