【问题标题】:How to change the Django admin filter to use a dropdown instead of list that can also be searched?如何更改 Django 管理过滤器以使用下拉列表而不是也可以搜索的列表?
【发布时间】:2021-11-02 09:20:21
【问题描述】:

在您将此标记为重复之前,我已阅读this question 的解决方案。

在 Django Admin 中,我有很多价值观。处理该数据的团队目前可以使用 CTRL+F 至少找到所需的字段。

为了修复 UI,我在上面标记的问题的解决方案中提供了下拉渲染选项。但是,正如我所说,我需要它是可搜索的。

【问题讨论】:

    标签: python django


    【解决方案1】:

    几周前我也在为同样的问题苦苦挣扎。所以这个答案可能对未来的一些开发人员有用。

    我设法通过编写自定义 template.html

    解决了这个问题 我已经将代码捆绑在一个很棒的包中,现在它对你也一样,here's the link


    您可以通过以下方式实现 Searchable Dropdown 来代替默认列表:

    1.安装:

    pip install django-admin-searchable-dropdown
    

    此命令将在您的项目中安装最新版本的软件包。
    现在,通过将 admin_searchable_dropdown 添加到 INSTALLED_APPS 内的 settings.py 文件中,将包包含在您的项目中。

    2。用法:
    假设您有以下模型:

    from django.db import models
    
    class CarCompany(models.Model):
        name = models.CharField(max_length=128)
    
    class CarModel(models.Model):
        name = models.CharField(max_length=64)
        company = models.ForeignKey(CarCompany, on_delete=models.CASCADE)
    

    并且您想在company 的基础上过滤CarModelAdmin 中的结果。您需要在CarCompany 中定义search_fields,然后像这样定义过滤器:

    from django.contrib import admin
    from admin_searchable_dropdown.filters import AutocompleteFilter
    
    
    class CarCompanyFilter(AutocompleteFilter):
        title = 'Company' # display title
        field_name = 'company' # name of the foreign key field
    
    
    class CarCompanyAdmin(admin.ModelAdmin):
        search_fields = ['name'] # this is required for django's autocomplete functionality
        # ...
    
    
    class CarModelAdmin(admin.ModelAdmin):
        list_filter = [CarCompanyFilter]
        # ...
    

    执行这些步骤后,您可能会看到过滤器:

    1. This is how the list filter is rendered in the form of a dropdown when the package is used
    2. And the dropdown filter is also Searchable

    提供的功能:

    1. 如果您在管理过滤器中有较大的字段,边栏会变宽,此软件包会以下拉格式为您提供相同的列表,因此没有这样的麻烦。
    2. 如果您有超过 20 个字段项,列表过滤器现在是一个长侧窗格,只会破坏管理界面。下拉过滤器解决了这个问题。
    3. Dropdown 也是“可搜索”的,带有输入文本字段(利用 Django 自己的 auto_complete 功能),所以只要您使用的 Django 版本大于 2.0,就可以了。
    4. 您可以自定义您可能拥有的其他list_filters,例如更改下拉菜单上方的标题或自定义搜索逻辑等。
    5. 您可以自定义要在下拉选项中显示的小部件文本,以使用默认 str(obj) 以外的其他内容

    【讨论】:

      猜你喜欢
      • 2011-07-22
      • 1970-01-01
      • 2017-12-04
      • 1970-01-01
      • 2015-08-01
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多