如何在django admin home中添加搜索栏

jk9hmnmh  于 2023-03-31  发布在  Go
关注(0)|答案(2)|浏览(205)

我在Django中有不同的应用程序:

First APP:
  First APP model1
  First APP model2
SECOND APP:
  SECOND APP model1
  SECOND APP model2

实际上有很多应用程序和模型,我想知道我是否可以在http://localhost:8000/admin/ URL中使用search_fields,即在Django管理站点的主页上。

由于每个应用程序都有自己的管理文件,我在哪里注册它们。所以在这种情况下,我在哪里放置search_fields

7ivaypg9

7ivaypg91#

您可以使用django-admin-searchbar

注意:我还没有使用过这个插件

6ljaweal

6ljaweal2#

我没有设法添加一个搜索栏直接进入管理主页,但我做了一个页面,其中列出了所有的应用程序(根据连接的用户的权限),如果你点击一个应用程序的链接,它会把你送到应用程序的主页.我添加了一个按钮,管理主页打开这个网页包含过滤器.
xxxx_project/templates/list_apps.html:

{% extends "admin/base.html" %}

{% block content %}
  <div class="container">

    <h1>Applications</h1>

    <input type="text" id="myInput" onkeyup="myFunction()" placeholder="Filter..." title="Filter on applications"><br><br>

    <ul id='myUL' style='list-style-type:none'>
        {% for app in app_list %}
            {% if app.label in perms %}
                <li><a href="{% url 'admin:app_list' app.label %}" style='text-decoration:none; color:#333'>{{ app.name }}</a></li>
            {% endif %}
        {% endfor %}
    </ul>

    <script>
        function myFunction() {
            var input, filter, ul, li, a, i;
            input = document.getElementById("myInput");
            filter = input.value.toUpperCase();
            ul = document.getElementById("myUL");
            li = ul.getElementsByTagName("li");
            for (i = 0; i < li.length; i++) {
                a = li[i].getElementsByTagName("a")[0];
                if (a.innerHTML.toUpperCase().indexOf(filter) > -1) {
                    li[i].style.display = "";
                } else {
                    li[i].style.display = "none";
                }
            }
        }
    </script>

{% endblock %}

xxxx_project/urls.py:

from .views import list_apps

urlpatterns = [
    ....
    path('apps/', list_apps, name='list_apps'),
]

xxxx_project/views.py:

def list_apps(request):
    installed_apps = apps.get_app_configs()
    exclude_labels = ['admin', 'auth', 'contenttypes', 'sessions', 'messages', 'staticfiles']
    app_list = [{'name': app.verbose_name, 'label': app.label} for app in installed_apps if app.label not in exclude_labels]
    return render(request, 'list_apps.html', {'app_list': app_list})

然后,转到url“xxxxxx/apps/”:

它允许我过滤应用程序名称:

相关问题