Django的Generic ListView的简单过滤器。
项目描述
django-generic-filters 是一个工具包,用于使用表单过滤 Django 的 ListView 的结果。
主要用例当然是搜索表单和过滤列表。
作为开发者,假设您有一个 ListView,为了使用户能够过滤结果
使用表单轻松地将过滤器渲染为 HTML;
用户通常通过 GET 发送过滤器;
使用 Django 表单验证用户的输入;
使用表单的清理数据过滤 Django 视图的查询集。
示例
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 查看哈希值)
构建发行版
关闭
哈希值 for django_generic_filters-2.1.1-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ed27828f1c1af0f0c6d0615b1df15c8c9cfe112f2cfd37c3c50a3b46f165f1d4 |
|
MD5 | cbe6e845ce635f83ae91ce5002754594 |
|
BLAKE2b-256 | 3d5526d8b05e3cadf91d86015391384b658613a73a4a1c09114baae8cd1fea6f |