使用django为通用列表视图提供简单的过滤器。
django-generic-filters的Python项目详细描述
django generic filter s是一个过滤django的结果的工具包 ListView,使用表单。
主要的用例显然是搜索表单和过滤列表。
作为一个开发人员,假设您有一个ListView,以便让用户 筛选结果:
- 使用表单可以轻松地将筛选器呈现为html;
- 用户通常通过get; 发送过滤器
- 使用django表单验证用户的输入;
- 使用表单的清理数据筛选django视图的queryset。
示例
views.py
fromdjango_genericfilters.viewsimportFilteredListViewclassUserListView(FilteredListView):# ListView options. FilteredListView inherits from ListView.model=Usertemplate_name='user/user_list.html'paginate_by=10context_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'defform_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.ifform.cleaned_data['is_active']=='yes':queryset=queryset.filter(is_active=True)elifform.cleaned_data['is_active']=='no':queryset=queryset.filter(is_active=False)ifform.cleaned_data['is_staff']=='yes':queryset=queryset.filter(is_staff=True)elifform.cleaned_data['is_staff']=='no':queryset=queryset.filter(is_staff=False)ifform.cleaned_data['is_superuser']=='yes':queryset=queryset.filter(is_superuser=True)elifform.cleaned_data['is_superuser']=='no':queryset=queryset.filter(is_superuser=False)returnqueryset
forms.py
fromdjangoimportformsfromdjango.utils.translationimportugettext_lazyas_fromdjango_genericfiltersimportformsasgfclassUserListForm(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'))defget_order_by_choices(self):return[('date_joined',_(u'date joined')),('last_login',_(u'last login')),('last_name',_(u'Name'))]
表格
<> P>几种常用形式混合以覆盖频繁用例:- OrderFormMixin带有ORDER_by和ORDER_reverse字段。
- QueryFormMixin用于使用icontains进行少量全文搜索。