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