Как создать пользовательский фильтр в Django Admin Model?

Я пытаюсь создать пользовательский фильтр с использованием некоторых селекторов на модели под названием Foo.

У меня есть простая страница Admin для этой модели, созданная с помощью:

class FooAdmin(admin.ModelAdmin):
    list_filter = ["created_at", CustomFilter]

Я хочу создать CustomFilter, в котором пользователь может выбрать запуск этого пользовательского запроса в качестве фильтра следующим образом: enter image description here

У меня есть нечто подобное, но оно требует имя_параметра, что ограничивает его одним атрибутом для фильтрации в модели Foo. Есть ли способ обойти это?:

class CustomListFilter(admin.SimpleListFilter):
    def lookups(
        self,
        request,
        model_admin,
    ) -> List[Tuple[str, str]]:
        return [
            ("getCustomFilter", ("True")),
        ]

    def queryset(self, request: Any, queryset: QuerySet) -> Optional[QuerySet]:
        if self.value() == "getCustomFilter":
            return Foo.selector.order_by_something().distinct_on_something()
        
        return queryset

parameter_name это не важно для вашего сценария, поэтому вы можете установить это значение

так

class CustomListFilter(admin.SimpleListFilter):
    title='By Use Custom Filter'
    parameter_name='apply'

    def lookups(
        self,
        request,
        model_admin,
    ) -> List[Tuple[str, str]]:
        return [
            ("getCustomFilter", ("True")),
        ]

    def queryset(self, request: Any, queryset: QuerySet) -> Optional[QuerySet]:
        if self.value():
            return Foo.objects.filter(yourFilter)

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