使用django为通用列表视图提供简单的过滤器。

django-generic-filters的Python项目详细描述


django generic filter s是一个过滤django的结果的工具包 ListView,使用表单。

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

作为一个开发人员,假设您有一个ListView,以便让用户 筛选结果:

  • 使用表单可以轻松地将筛选器呈现为html;
  • 用户通常通过get;
  • 发送过滤器
  • 使用django表单验证用户的输入;
  • 使用表单的清理数据筛选django视图的queryset。
Build Status

示例

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进行少量全文搜索。
详见“MIXIN”文档。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java文件分块,获取长度字节   java嵌入式Tomcat不执行jsf页面   java我的数据库中有2个实体,但hibernate返回其中6个。   java如何基于逗号拆分字符串   java取消已经运行的CompletableFutures的预期模式是什么   java如何在informix中从另一个数据库复制表ddl和数据   为什么图片是黑色的?   java根据字符串数组中的单词筛选列表   Java8的集合。平行流有效吗?   Kotlin中的java静态内部类   java如何在GUI中生成一列字符串   javafx如何正确使用高对比度主题?   带空格的javascript Httpurlconnection参数   java如何设置GridBagLayout的约束   java如何在一个线程可能尚未初始化时关闭另一个线程   java将简单时间格式转换为特殊时间格式(hhmmt)   安卓/java阵列重复过滤器的问题   java在队列的链接实现下,入队和出队是如何工作的   java更新sql外键约束