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

时间:2016-02-14 06:05:40

标签: django-forms django-admin django-autocomplete-light

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

如果您使用的Django版本高于2.0,则可以尝试使用内置的autocomplete字段。

  

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

     

Select2输入看起来与默认输入类似,但具有搜索功能,可以异步加载选项

有一个简单的app可以做到:

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

然后将admin_auto_filters添加到项目的settings.py中的INSTALLED_APPS中。

假设我们有以下模型:

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)

您想根据歌手的身份在专辑管理中过滤结果,然后可以在歌手中定义搜索字段,然后将筛选器定义为:

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

按照这些步骤操作后,您可能会看到过滤器为:

autocomplete filter

search as you type