You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Django Admin面板的筛选区为特定对象类型添加搜索栏

在Django Admin筛选区添加对象类型搜索功能

方法一:原生自定义Filter(无需插件)

如果你不想依赖第三方包,可以通过自定义SimpleListFilter实现带搜索框的筛选:

  1. 创建自定义Filter类
    在你的app的admin.py中添加:
from django.contrib import admin
from django.utils.translation import gettext_lazy as _

class ObjectTypeSearchFilter(admin.SimpleListFilter):
    title = _('对象类型')
    parameter_name = 'object_type'

    # 空返回lookups,用搜索框替代选项列表
    def lookups(self, request, model_admin):
        return ()

    # 处理筛选逻辑
    def queryset(self, request, queryset):
        search_value = self.value()
        if search_value:
            return queryset.filter(object_type__icontains=search_value)
        return queryset

    # 指定自定义模板路径
    def template(self):
        return 'admin/object_type_search_filter.html'
  1. 创建筛选模板
    在项目templates/admin/目录下新建object_type_search_filter.html:
{% load i18n %}
<h3>{{ title }}</h3>
<div class="choices">
    <input type="text" name="{{ parameter_name }}" value="{{ value|default:'' }}" 
           placeholder="{% trans '搜索对象类型...' %}" style="width: 100%; margin-bottom: 8px;">
    <button type="submit" class="button" style="margin-right: 8px;">{% trans '搜索' %}</button>
    {% if value %}
        <a href="{{ request.get_full_path|remove_param:parameter_name }}" class="button">{% trans '清除' %}</a>
    {% endif %}
</div>
  1. 添加模板标签处理清除链接
    在app的templatetags/目录下新建remove_param.py(无此目录则创建,同时添加__init__.py文件):
from django import template
from urllib.parse import urlparse, parse_qs, urlencode

register = template.Library()

@register.filter
def remove_param(url, param):
    parsed_url = urlparse(url)
    query_params = parse_qs(parsed_url.query)
    query_params.pop(param, None)
    new_query = urlencode(query_params, doseq=True)
    base_url = f"{parsed_url.scheme}://{parsed_url.netloc}{parsed_url.path}"
    return f"{base_url}?{new_query}" if new_query else base_url
  1. 在ModelAdmin中启用Filter
    修改你的ModelAdmin配置:
class YourModelAdmin(admin.ModelAdmin):
    list_filter = (ObjectTypeSearchFilter,)

方法二:使用第三方插件(快捷实现)

如果想快速完成功能,可以用专门的第三方包django-admin-list-filter-search:

  1. 安装包
pip install django-admin-list-filter-search
  1. 配置Filter
    在admin.py中:
from django.contrib import admin
from admin_list_filter_search import AutocompleteFilter

class ObjectTypeFilter(AutocompleteFilter):
    title = _('对象类型')
    parameter_name = 'object_type'
    # 自动补全URL格式:admin:你的模型名_字段名_autocomplete
    autocomplete_url = 'admin:yourmodel_object_type_autocomplete'

class YourModelAdmin(admin.ModelAdmin):
    list_filter = (ObjectTypeFilter,)
    # 启用字段自动补全
    autocomplete_fields = ['object_type']
  1. 配置URL(部分版本可自动生成,按需添加)
    在项目urls.py中添加自动补全路由:
from django.urls import path
from django.contrib.admin import site

urlpatterns = [
    path('admin/', site.urls),
    path('admin/yourapp/yourmodel/object_type/autocomplete/', 
         admin.views.autocomplete, 
         name='admin:yourmodel_object_type_autocomplete'),
]

注意事项

  • 自定义Filter的样式可根据需求调整,保持和Django Admin风格一致
  • 第三方插件需注意和你的Django版本兼容,安装前查看官方文档说明

内容的提问来源于stack exchange,提问作者stackoverflow1234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:50:29