Администратор Django: Как фильтровать целочисленные поля для определенного диапазона значений - PullRequest
7 голосов
/ 30 октября 2010

Как мне создать фильтр в Django Admin, чтобы отображать только записи, где целое значение лежит между двумя значениями?Например, если у меня есть модель Person с атрибутом age, и я хочу отображать записи Person только в возрасте от 45 до 65 лет.

Ответы [ 4 ]

1 голос
/ 06 февраля 2017

Вы можете отфильтровать поле примерно так же, используя queryset() Функция ... Я использовал SimpleListFilter

    def queryset(self, request, queryset):
        filt_age = request.GET.get('parameter_name')
        return queryset.filter(
                    age__range=self.age_dict[filt_age]
                )

И создайте dict в lookups() и верните его в соответствии с возрастом

    def lookups(self, request, model_admin):
    return [
        (1, '5-21'),
        (2, '22-35'),
        (3, '35-60')
    ]
1 голос
/ 06 июня 2011

То, что вы ищете, это http://djangosnippets.org/snippets/587/ - фрагмент немного устарел, но после дополнительного незначительного изменения работает нормально.

Я загрузил исправленную версию в https://gist.github.com/1009903

0 голосов
/ 25 июля 2014

Основываясь на другом ответе на связанный вопрос , я узнал, что существует официально документированный способ сделать это начиная с версии 1.4 . Он даже включает пример фильтрации по дате.

Тем не менее, фрагмент в ответе sorin также интересен, поскольку он просто добавляет параметры стиля django в URL, что является решением, отличным от примера официальной документации.

0 голосов
/ 31 октября 2010

Если вы просто хотите отфильтрованную версию представления списка, доступ к которой осуществляется по ссылке (скажем, в виде списка), например, для просмотра только связанных элементов модели, вы делаете что-то вроде этого:

def admin_view_receipts(self, object):
    url = urlresolvers.reverse('admin:invoice_%s_changelist'%'receipt')
    params = urllib.urlencode({'invoice__id__exact': object.id})
    return '<a href="%s?%s">Receipts</a>' % (url, params)
admin_view_receipts.allow_tags = True
admin_view_receipts.short_description = 'Receipts'

Это приведет вас к списку для «Получений», но только к тем, которые связаны с выбранным Счетом.

Если вы хотите фильтр, который отображается на боковой панели, вы можете попробовать этот фрагмент или этот

...