Внимание! Некоторые части API от django, упомянутые в моем ответе, считаются внутренними и могут быть изменены в будущих выпусках django без уведомления.
Принимая это к сведению, на самом деле довольно легко создать собственный фильтр. Все, что вам нужно сделать, это:
- подкласс
SimpleListFilter
и создать некоторый метод внутри, который будет генерировать свои значения диапазона по умолчанию и выбранные значения диапазона (для рендеринга шаблона с фильтром)
- Установить метод QuerySet, который будет принимать параметры, представленные ваш фильтр и список фильтров QuerySet
- создать шаблон с фильтром (на основе admin/filter.html)
- набором
template
свойства в вашем SimpleListFilter
подкласса, указывая на свой шаблон фильтра.
Джанго передавать в шаблон 3 параметров:
title
- Ваше название фильтра (взято из title
собственности в вашем классе)
choices
- список dicts порождена choices
методом вашего класса (по умолчанию он изменяет список кортежей, возвращаемых методом lookups
)
spec
- ваш экземпляр класса.
С этого момента вы можете перейти к любому атрибуту или методу своего класса, используя spec
в шаблоне, поэтому создание любого фильтра должно быть возможным.