Можно ли отфильтровать имена объектов, возвращаемых в 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/