可以按声明定义的每个字段查询集筛选器的窗体
django-filtered-form的Python项目详细描述
安装
在virtualenv中,使用pip install django-filteredform。
您不需要将它安装到您的settings.INSTALLED_APPS中,因为它 不提供任何模型或模板,仅提供表单。
用法
在django模型窗体的字段上定义筛选器的声明方式:
from django import forms from people.models import Person from filtered_form.forms import FilteringForm class PersonAdminForm(FilteringForm): class Meta: model = Person instance_filters = { 'units': 'company.units' } filters = { 'units': models.Q(is_active=True), 'colours__in': ['red','blue','green'] }
instance_filters
instance_filters允许应用关系筛选器。
例如,如果有三个模型,Person、Unit和Company, 每个人和单位都有公司的外键,你可以 使用实例筛选器可以轻松地仅选择关联公司的单位 观察一个人时的疑问。
或者,您可以提供一个queryset方法(不需要参数)。 有关更多筛选信息:
instance_filters = { 'units': 'company.units.active' }
普通filters
一个更传统的过滤器结构,它允许您提供一个Q对象,或者 键值对的dict,它将被传递到queryset上的.filter()。
如果你的过滤键无效的话,你可以很容易地开枪打自己的脚 该查询集上的筛选器函数的参数。
表单集
您可以使用此方法创建表单,然后将其传递给您的表单集 等级或工厂。或者,可以有一个基于filtered_form.forms.FilteredFormSet的formset类, 它还将在空窗体上正确设置queryset值,这是非常 在使用动态窗体时很有用。
版本历史记录
1.0.3
修复在django管理中无法创建新对象的错误。
1.0.1
改进文档。
在instance_filter的值中允许可调用。
允许值为filter的dict。
1.0
初次发布。