Можно ли отфильтровать имена объектов, возвращаемых в Django Admin

Для моего Django CMS Admin я хотел бы предотвратить возврат определенного объекта в CMS. Какой лучший способ сделать это?

Я бы хотел сделать что-то вроде

class MyModuleAdmin(admin.ModelAdmin):
    list_display = ['name']
    list_filter = ('my_module__name__is_not=moduleidontwant',)

Вы можете просто перегрузить функцию администратора get_queryset и отфильтровать ненужные вам элементы:

class MyModuleAdmin(admin.ModelAdmin):
    list_display = ['name']

    def get_queryset(self, request):
        queryset = super(MyModuleAdmin, self).get_queryset(request)
        return queryset.exclude(name='moduleidontwant')
# custom_filters.py
from django.contrib.admin import SimpleListFilter

class testFilter(SimpleListFilter):
    """ This filter is being used in django admin panel in specified model."""
    title = 'Title of you field'
    parameter_name = 'field_name'
    
    def queryset(self, request, queryset):
       if not self.value():
           return queryset
       else:
           return queryset.filter(my_module__name__is_not='moduleidontwant') #add your filter here.

Добавьте этот testFilter в ваш list_filter в файл admin.py.

# admin.py
from django.contrib import admin
from .models import *
from .custom_filters import testFilter

class MyModuleAdmin(admin.ModelAdmin):
    list_display = ['name']
    list_filter = (testFilter)

Вы можете использовать эту ссылку в случае, если вы застряли между https://www.dothedev.com/blog/django-admin-list_filter/

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