Добавление поля поиска на главную страницу админки Django может осуществляться с помощью кастомизации шаблона или путем создания собственной административной панели. В данном ответе я расскажу о первом подходе, который является более простым и быстрым.
1. Создание кастомного шаблона для админки:
- В папке вашего проекта создайте папку с именем "templates".
- Внутри папки "templates" создайте папку "admin".
- В папке "admin" создайте файл "base_site.html".
- Откройте файл "base_site.html" и вставьте следующий код:
{% extends "admin/base.html" %} {% block content %} {{ block.super }} <div id="content-search"> <h2>Search</h2> <form method="get" action="" id="searchbar"> <input type="text" name="q" placeholder="Search" value="{{ query }}"/> <input type="submit" value="Search" class="search-button"/> </form> </div> {% endblock %}
2. Настройка пути к вашему кастомному шаблону:
- В файле "settings.py" вашего проекта найдите переменную "TEMPLATES".
- Внутри списка настройте 'APP_DIRS': True, чтобы Django мог обнаружить шаблоны внутри приложений.
3. Обновление URL-паттернов:
- В файле "urls.py" вашего проекта найдите переменную "urlpatterns".
- Импортируйте класс "AdminSite" из модуля "django.contrib.admin".
- Создайте экземпляр класса "AdminSite".
- Замените строку, в которой создается объект "admin.site", на создание вашего собственного экземпляра "AdminSite".
from django.urls import path from django.contrib import admin from django.contrib.admin import AdminSite class CustomAdminSite(AdminSite): site_header = 'My Custom Admin' admin.site = CustomAdminSite(name='customadmin') urlpatterns = [ path('admin/', admin.site.urls), ]
4. Обновление настроек админки:
- В файле "admin.py" вашего приложения импортируйте класс "ModelAdmin" из модуля "django.contrib.admin".
- Определите свой класс-наследник от "ModelAdmin".
- Добавьте в класс-наследник метод "get_search_results", который будет осуществлять поиск на основе введенной пользователем строки.
from django.contrib import admin from django.contrib.admin import ModelAdmin class CustomModelAdmin(ModelAdmin): def get_search_results(self, request, queryset, search_term): search_fields = self.get_search_fields(request) if search_term: queryset = queryset.filter(**{ '{}__icontains'.format(search_field): search_term, }) return queryset, False admin.site.register(YourModel, CustomModelAdmin)
Обратите внимание, что "YourModel" должно быть заменено на имя вашей модели.
5. Перезапустите ваш сервер и проверьте работу поисковой строки на главной странице админки.
В результате выполнения всех вышеописанных действий, вы должны увидеть поле поиска с кнопкой на главной странице админки, которые позволят вам искать записи в вашей модели.