跳转到主要内容

可以声明性地定义字段查询集过滤器的表单

项目描述

安装

在您的虚拟环境中,使用 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 允许应用关系过滤器。

例如,如果您有三个模型,分别是 PersonUnitCompany,并且每个人和单位都有一个外键指向公司,您可以使用实例过滤器轻松地选择查看人员时仅关联公司的单位。

或者,您还可以提供一个不需要参数的查询集方法(方法),以进行更多过滤

instance_filters = {
    'units': 'company.units.active'
}

普通过滤器

更传统的过滤器结构,允许您提供一个 Q 对象,或键值对的字典,该字典将被传递到查询集的 .filter() 上。

如果您的过滤器键不是该查询集过滤器函数的有效参数,您可能会很容易地弄巧成拙。

表单集

您可以使用此方法创建表单,并将其传递给表单集类或工厂。或者,您可以使用基于 filtered_form.forms.FilteredFormSet 的表单集类,这将正确设置空表单的查询集值,这对于使用动态表单非常有用。

版本历史

1.0.3

修复了一个bug,在django admin中无法创建新对象。

1.0.1

改进文档。

允许在 instance_filter 的值中使用可调用对象。

允许在 filter 的值中使用字典。

1.0

初始发布。

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面