跳转到主要内容

Django REST Framework的链式关系和过滤功能

项目描述

`django-rest-framework-chain` 是 Django REST Framework 的扩展,允许任意链式关系和查找过滤器的组合。

.. image:: https://secure.travis-ci.org/philipn/django-rest-framework-chain.png?branch=master
:target: http://travis-ci.org/philipn/django-rest-framework-chain

安装
------------

.. code-block:: bash

$ pip install djangorestframework-chain

需求
------------

* Python 2.6+
* Django 1.4.5+

用法
-----

通过关系链式过滤
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

要启用通过关系链式过滤

.. code-block:: python

from rest_framework import viewsets
import django_filters
from rest_framework_chain import ChainedFilterSet, RelatedFilter

# 这是一个普通的FilterSet
class UserFilter(django_filters.FilterSet)
username = django_filters.CharFilter(name='username')
...

class PageFilter(ChainedFilterSet)
title = django_filters.CharFilter(name='title')
author = RelatedFilter(UserFilter, name='author')

# 然后像使用任何其他FilterSet一样使用PageFilter

class PageView(viewsets.ModelViewSet)
...
filter_class = PageFilter

然后我们可以通过“author”关系自动链式我们的过滤器,如下所示:

/api/page/?author__username=philipn


允许字段上的任何查找类型
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我们可以使用`AllLookupsFilter`允许在特定字段上使用所有可能的查找类型。
虽然我们也可以手动指定这些,例如:

.. code-block:: python

class ProductFilter(django_filters.FilterSet)
min_price = django_filters.NumberFilter(name="price", lookup_type='gte')
...

允许使用 ``price__gte`` 查询。但这很麻烦,我们有时想
允许对特定字段进行任何可能的查询。我们通过使用 ``AllLookupsFilter`` 来实现

.. code-block:: python

from rest_framework import viewsets
import django_filters
from rest_framework_chain import ChainedFilterSet, AllLookupsFilter

class PageFilter(ChainedFilterSet)
title = AllLookupsFilter(name='title')
...

然后我们可以在 ``title`` 字段上使用任何可能的查询,例如:

/api/page/?title__icontains=park

或者:

/api/page/?title__startswith=The

并且还可以根据默认查询(``exact``)进行过滤,就像通常一样:

/api/page/?title=The%20Park

结合使用 RelatedFilter 和 AllLookupsFilter
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我们可以结合使用 ``RelatedFilter`` 和 ``AllLookupsFilter``

.. code-block:: python

from rest_framework import viewsets
import django_filters
from rest_framework_chain import ChainedFilterSet, RelatedFilter

class PageFilter(ChainedFilterSet)
title = django_filters.CharFilter(name='title')
author = RelatedFilter(UserFilter, name='author')

# 这是一个普通的FilterSet
class UserFilter(ChainedFilterSet)
username = AllLookupsFilter(name='username')
...

然后我们可以这样过滤:

/api/page/?author__username__icontains=john

关于 RelatedFilter 的更多信息
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

支持递归关系。在某些情况下,您需要指定完整的模块
路径在 ``RelatedFilter`` 定义中,例如。

.. code-block:: python

class PersonFilter(ChainedFilterSet)
name = AllLookupsFilter(name='name')
best_friend = RelatedFilter('people.views.PersonFilter', name='best_friend')

class Meta
model = Person

许可证
-------
版权所有(c)2013 Philip Neustrom <philipn@gmail.com>

特此免费授予任何人获取此软件和相关文档文件(“软件”)的副本
的权利,不受任何限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售
软件副本,并允许向软件提供者提供软件的人这样做,但受以下条件约束
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何形式的保证,明示或暗示,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,
无论是在合同诉讼、侵权诉讼或其他诉讼中,均源于、产生于或与软件或其使用或其他交易有关。

软件。
软件。

软件。
软件。
软件。
软件。
软件。
软件。
软件。

项目详情


下载文件

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

源分布

djangorestframework-chain-0.1.3.tar.gz (9.0 kB 查看哈希值)

上传时间

由以下支持

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