跳转到主要内容

Django的Generic ListView的简单过滤器。

项目描述

django-generic-filters 是一个工具包,用于使用表单过滤 Django 的 ListView 的结果。

主要用例当然是搜索表单和过滤列表。

作为开发者,假设您有一个 ListView,为了使用户能够过滤结果

  • 使用表单轻松地将过滤器渲染为 HTML;

  • 用户通常通过 GET 发送过滤器;

  • 使用 Django 表单验证用户的输入;

  • 使用表单的清理数据过滤 Django 视图的查询集。

Build Status

示例

views.py

from django_genericfilters.views import FilteredListView


class UserListView(FilteredListView):
    # ListView options. FilteredListView inherits from ListView.
    model = User
    template_name = 'user/user_list.html'
    paginate_by = 10
    context_object_name = 'users'

    # FormMixin options. FilteredListView inherits from FormMixin.
    form_class = UserListForm

    # FilteredListView options.
    search_fields = ['first_name', 'last_name', 'username', 'email']
    filter_fields = ['is_active', 'is_staff', 'is_superuser']
    default_order = 'last_name'

    def form_valid(self, form):
        """Return the queryset when form has been submitted."""
        queryset = super(UserListView, self).form_valid(form)

        # Handle specific fields of the custom ListForm
        # Others are automatically handled by FilteredListView.

        if form.cleaned_data['is_active'] == 'yes':
            queryset = queryset.filter(is_active=True)
        elif form.cleaned_data['is_active'] == 'no':
            queryset = queryset.filter(is_active=False)

        if form.cleaned_data['is_staff'] == 'yes':
            queryset = queryset.filter(is_staff=True)
        elif form.cleaned_data['is_staff'] == 'no':
            queryset = queryset.filter(is_staff=False)

        if form.cleaned_data['is_superuser'] == 'yes':
            queryset = queryset.filter(is_superuser=True)
        elif form.cleaned_data['is_superuser'] == 'no':
            queryset = queryset.filter(is_superuser=False)

        return queryset

forms.py

from django import forms
from django.utils.translation import gettext_lazy as _
from django_genericfilters import forms as gf


class UserListForm(gf.QueryFormMixin, gf.OrderFormMixin, gf.FilteredForm):
    is_active = gf.ChoiceField(label=_('Status'),
                               choices=(('yes', _('Active')),
                                        ('no', _('Unactive'))))

    is_staff = gf.ChoiceField(label=_('Staff'))

    is_superuser = gf.ChoiceField(label=_('Superuser'))

    def get_order_by_choices(self):
        return [('date_joined', _(u'date joined')),
                ('last_login', _(u'last login')),
                ('last_name', _(u'Name'))]

表单

提供了几个表单混合,以覆盖常见的用例

  • OrderFormMixin 带有 order_by 和 order_reverse 字段。

  • QueryFormMixin 用于使用 icontains 进行少量全文搜索。

有关详细信息,请参阅“混合”文档。

资源

项目详情


下载文件

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

源代码发行版

django-generic-filters-2.1.1.tar.gz (37.0 kB 查看哈希值)

上传时间 源代码

构建发行版

django_generic_filters-2.1.1-py3-none-any.whl (21.1 kB 查看哈希值)

上传时间 Python 3

由以下组织支持