跳转到主要内容

为django-rest-framework提供的RQL过滤器后端

项目描述

Build Status PyPi version codecov

此应用程序实现了针对django-rest-framework的RQL/RSQL/FIQL过滤器后端,并允许传递任意的条件表达式来过滤实体。

安装

pip install django-rql-filter

用法

rql_filter 添加到您的项目 INSTALLED_APPS

RQLFilterBackend 添加到您的视图集 filter_backends

from rql_filter.backend import RQLFilterBackend

class ThingyViewSet(viewsets.ReadOnlyModelViewSet):
    filter_backends = (
        ...
        RQLFilterBackend,
        ...
    )

您现在可以通过使用 q 查询字符串参数将RQL/RSQL/FIQL查询传递到API URL。

curl http://my.app/api/thingies/?format=json&q=name==bob;age=gt=30

查询语法

查询是通过字段比较的组合来完成的。比较由字段名称、运算符和值组成。

运算符

含义

示例

==

等于

name==bob

!=

不等于

name!=bob

< =lt=

小于

age<30 age=lt=30

<= =le=

小于或等于

age<=30 age=le=30

> =gt=

大于

age>30 age=gt=30

>= =ge=

大于或等于

age>=30 age=ge=30

=in=

属于集合

name=in=(bob,kate)

=out=

不属于集合

name=out=(bob,kate)

比较可以通过使用双下划线分隔字段名称来遍历模型关系: father__name==bob

当值包含特殊字符或空格时,必须用单引号或双引号引用: name=="bob katz"

可以使用逻辑运算符组合比较: ; 用于逻辑 AND,和 , 用于逻辑 OR: name=="bob";age>=30。AND 优先于 OR;可以使用括号进行分组: name=="bob";(age>=30,age<3)

注意: RQL/RSQL/FIQL 的支持仍然不完整,它将在未来得到增强。

配置

RQL_FILTER_QUERY_PARAM 设置要使用的查询字符串参数名称;默认为 'q'

在不使用 rest-framework 的情况下使用

您可以在 rest-framework 视图集外部手动使用后端

from rql_filter.backend import RQLFilterBackend

# May be reused any number of times
backend = RQLFilterBackend()

# Fake request object
class FakeRQLRequest:
    def __init__(self, q):
        self.GET = {'q': q}

qs = Thingy.objects.all()
filtered_qs = backend.filter_queryset(
    FakeRQLRequest('name==bob;age=gt=30'),
    qs,
    None
)

测试

安装测试依赖项

pip install -e .[testing]

运行测试

py.test

项目详情


下载文件

为您的平台下载文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

django-rql-filter-0.1.3.tar.gz (5.4 kB 查看哈希值)

上传时间

由以下支持