Django autocomplete用于管理员的列表过滤器

Tre*_*own 5 django-forms django-admin django-autocomplete-light

我已成功设置自动完成注册表并拥有我的django管理表单,如果您转到表单,则自动完成工作.我希望能够扩展自动填充功能,以便在list_filter视图上工作.因此,当您查看Admin.py生成的视图时 - 生成的list_filter输入也将使用自动完成jquery +服务URL.

我没有看到文档中列出的任何内容,任何人都有任何指针?

not*_*der 5

如果您使用的 Django 版本高于 2.0,您可以尝试为此使用内置的自动完成字段。

默认情况下,管理员对这些字段使用选择框界面 ()。有时您不想承担选择所有相关实例以显示在下拉列表中的开销。

Select2 输入看起来与默认输入相似,但带有异步加载选项的搜索功能

有一个简单的应用程序可以做到这一点:

安装使用: pip install django-admin-autocomplete-filter

然后添加admin_auto_filtersINSTALLED_APPS项目的内部 settings.py 中。

假设我们有以下模型:

class Artist(models.Model):
    name = models.CharField(max_length=128)

class Album(models.Model):
    name = models.CharField(max_length=64)
    artist = models.ForeignKey(Artist, on_delete=models.CASCADE)
    cover = models.CharField(max_length=256, null=True, default=None)
Run Code Online (Sandbox Code Playgroud)

并且您想根据艺术家在专辑管理中过滤结果,那么您可以在艺术家中定义搜索字段,然后将过滤器定义为:

from admin_auto_filters.filters import AutocompleteFilter

class ArtistFilter(AutocompleteFilter):
    title = 'Artist' # display title
    field_name = 'artist' # name of the foreign key field

class ArtistAdmin(admin.ModelAdmin):
    search_fields = ['name'] # this is required for django's autocomplete functionality
    ...

class AlbumAdmin(admin.ModelAdmin):
    list_filter = [ArtistFilter]
    
    '''
       defining this class is required for AutocompleteFilter
       it's a bug and I am working on it.
    '''
    class Media:
        pass
Run Code Online (Sandbox Code Playgroud)

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

自动完成过滤器

键入时搜索

  • 注意:“django-admin-autocomplete-filter”使用 GPL 许可证,这使得它在很多用例中无法使用。 (3认同)

Rom*_*bil 2

您应该定义自己的管理过滤器,该过滤器继承自django.contrib.admin.SimpleListFilter. 然后应该为此过滤器提供您自己的 HTML 模板,该模板将使用其中一个django-autocomplete-light小部件。作为小部件的参数,您应该定义所需的自动完成 URL。并且不要忘记为其添加适当的 JS 和 CSS。

所有这些都是在特殊应用程序中完成的:dal-admin-filters