Django Admin List Filter Dropdown 使用教程
项目介绍
django-admin-list-filter-dropdown
是一个 Django 管理后台过滤器实现,它将过滤器渲染为下拉菜单。如果你有一个字段有超过十个值需要过滤,Django 管理后台的过滤侧边栏会变得很长、很杂乱,难以使用。这个应用包含 DropdownFilter
类,它将过滤器渲染为下拉菜单,以避免这个问题。
项目快速启动
安装
使用 pip 安装 django-admin-list-filter-dropdown
:
pip install django-admin-list-filter-dropdown
配置
在 settings.py
中启用应用:
INSTALLED_APPS = (
'django_admin_listfilter_dropdown',
)
使用
在 admin.py
中使用下拉过滤器:
from django_admin_listfilter_dropdown.filters import DropdownFilter, RelatedDropdownFilter, ChoiceDropdownFilter
from django.contrib import admin
from .models import Entity
class EntityAdmin(admin.ModelAdmin):
list_filter = (
# 普通字段
('a_charfield', DropdownFilter),
# 选择字段
('a_choicefield', ChoiceDropdownFilter),
# 关联字段
('a_foreignkey_field', RelatedDropdownFilter),
)
admin.site.register(Entity, EntityAdmin)
应用案例和最佳实践
自定义过滤器
你可以创建一个自定义过滤器,使用提供的模板:
from django.contrib.admin import SimpleListFilter
class CustomFilter(SimpleListFilter):
template = 'django_admin_listfilter_dropdown/dropdown_filter.html'
def lookups(self, request, model_admin):
# 定义过滤选项
return (
('option1', 'Option 1'),
('option2', 'Option 2'),
)
def queryset(self, request, queryset):
# 根据选择的过滤选项过滤查询集
if self.value() == 'option1':
return queryset.filter(some_field='some_value')
if self.value() == 'option2':
return queryset.filter(some_field='another_value')
示例
以下是一个使用下拉过滤器的示例:
class CityAdmin(admin.ModelAdmin):
list_filter = (
('country', RelatedDropdownFilter),
)
admin.site.register(City, CityAdmin)
典型生态项目
django-admin-list-filter-dropdown
可以与其他 Django 管理后台增强工具一起使用,例如:
django-import-export
:用于导入和导出数据。django-grappelli
:一个 Django 管理后台的皮肤。django-admin-sortable2
:用于在管理后台中对对象进行排序。
这些工具可以进一步增强 Django 管理后台的功能和用户体验。