Skip to main content

Django 应用程序的一个简单扩展,用于在 django 管理面板中将过滤器呈现为自动完成小部件。

项目描述

django_select2_admin_filters

这个扩展基于django-select2并且可以使用或不使用 Grappelli。

安装

  • 使用 pip 安装

    pip install django-select2-admin-filters
    
  • 更新 INSTALLED_APPS,您还需要在 admin 和 django_select2 之后放置 django_select2_admin_filters

    INSTALLED_APPS = [
        'django.contrib.admin',
        #
        'django_select2',
        'django_select2_admin_filters',
    ]
    
  • 更新 urls.py 以使用模型过滤器(参考django-select2 文档)

    path('select2/', include('django_select2.urls')),
    

过滤器

过滤器通常有两种类型,但它们中的每一种都可以单选或多选:

  • 选择过滤器
    • 选择Select2Filter
    • MultipleChoiceSelect2Filter
  • 模型过滤器
    • 模型选择2过滤器
    • MultipleModelSelect2Filter

用法

  • 在 admin.py 中使用过滤器
      from django.contrib import admin
      from django_select2_admin_filters.admin import (
          Select2AdminFilterMixin)
      from django_select2_admin_filters.filters import (
          ChoiceSelect2Filter, MultipleChoiceSelect2Filter,
          ModelSelect2Filter, MultipleModelSelect2Filter)
      from your_app.models import Country, Person, Profession
    
    
      class CountryFilter(ModelSelect2Filter):
          title = 'Country of residence'                 # filter's title
          parameter_name = 'country'                     # parameter used in url and by default field name of Foreign Key used to filter results
          autocomplete_queryset = Country.objects.all()  # queryset to autocomplete
          search_fields = ['name__icontains']            # fields of Country model used to filtering
    
          # optionally you can override queryset method
          def queryset(self, request, queryset):
              val = self.value()
              if val:
                  return queryset.filter(country_of_residence=val)
              return queryset
    
    
      class ProfessionFilter(MultipleModelSelect2Filter):
          title = 'Profession'
          parameter_name = 'profession'
          autocomplete_queryset = Profession.objects.all()
          search_fields = ['name__icontains']
    
          def queryset(self, request, queryset):
              val = self.value_as_list()
              if len(val) > 0:
                  return queryset.filter(professions__profession_id__in=val)
              return queryset
    
    
      class StatusFilter(ChoiceSelect2Filter):
          title = 'Status'
          parameter_name = 'status'
          autocomplete_choice_list = [    # list of choices
              (1, 'Active',),
              (2, 'Suspended',),
              (3, 'Deleted',),
          ]
    
    
      @admin.register(Person)
      class PersonAdmin(Select2AdminFilterMixin, admin.ModelAdmin):
    
          # change_list_template = 'admin/change_list_filter_sidebar.html' <- DON'T override change_list_template
          list_filter = (CountryFilter, ProfessionFilter, StatusFilter,) # actually you cannot mix filters with traditional filters
    

去做

  • 添加测试
  • 添加处理dependent_fields

作者

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

django-select2-admin-filters-0.1.4.tar.gz (7.1 kB 查看哈希)

已上传 source

内置分布

django_select2_admin_filters-0.1.4-py2-none-any.whl (10.1 kB 查看哈希)

已上传 py2