跳转到主要内容

动态返回Django REST Framework序列化器字段的子集

项目描述

Build status PyPI Version PyPI Downloads License is MIT

此包提供了一个混合类,允许用户根据资源动态选择仅字段的子集。

官方版本支持

  • Django 2.2 LTS, 3.2 LTS, 4.0

  • 支持的REST Framework版本:3.8, 3.9

  • Python 3.7+

范围

这个库是关于基于个别请求过滤字段。我们故意保持其简单,并计划不添加新功能(包括对嵌套字段的支持)。不过,欢迎您贡献改进、代码简化和错误修复!(另见: #18

如果您需要更高级的过滤功能,也许 drf-flex-fields 可以为您提供一个选择。

安装

pip install drf-dynamic-fields

它做什么

示例序列化器

class IdentitySerializer(DynamicFieldsMixin, serializers.HyperlinkedModelSerializer):
    class Meta:
        model = models.Identity
        fields = ('id', 'url', 'type', 'data')

普通请求返回所有字段

GET /identities

[
  {
    "id": 1,
    "url": "http://localhost:8000/api/identities/1/",
    "type": 5,
    "data": "John Doe"
  },
  ...
]

另一方面,带有 fields 参数的查询返回字段的子集

GET /identities/?fields=id,data

[
  {
    "id": 1,
    "data": "John Doe"
  },
  ...
]

带有 omit 参数的查询排除指定的字段。

GET /identities/?omit=data

[
  {
    "id": 1,
    "url": "http://localhost:8000/api/identities/1/",
    "type": 5
  },
  ...
]

您可以在同一请求中同时使用 fieldsomit

GET /identities/?omit=data,fields=data,id

[
  {
    "id": 1
  },
  ...
]

但为什么有人想要这样做,这个作者并不清楚。

它也适用于单个对象!

GET /identities/1/?fields=id,data

{
  "id": 1,
  "data": "John Doe"
}

使用方法

在定义序列化器时,请使用 DynamicFieldsMixin

from drf_dynamic_fields import DynamicFieldsMixin

class IdentitySerializer(DynamicFieldsMixin, serializers.ModelSerializer):
    class Meta:
        model = models.Identity
        fields = ('id', 'url', 'type', 'data')

混入需要访问 request 对象。一些 DRF 类如 ModelViewSet 默认会设置它,但如果你自己处理序列化器,请通过上下文传递请求

events = Event.objects.all()
serializer = EventSerializer(events, many=True, context={'request': request})

警告

如果请求上下文无法访问请求,将发出警告

UserWarning: Context does not have access to request.

首先,请确保您已将请求传递给序列化器上下文(请参阅“用法”部分)。

在某些情况下(例如嵌套序列化器),您无法通过这种方式消除警告(请参阅问题27)。在这种情况下,您可以通过 settings.py 来抑制警告

DRF_DYNAMIC_FIELDS = {
   'SUPPRESS_CONTEXT_WARNING': True,
}

测试

要运行测试,请安装 Django 和 DRF,然后运行 runtests.py

$ python runtests.py

致谢

许可证

MIT 许可证,请参阅 LICENSE 文件。

项目详情


下载文件

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

源代码分发

drf_dynamic_fields-0.4.0.tar.gz (4.9 kB 查看哈希值)

上传时间 源代码

构建分发

drf_dynamic_fields-0.4.0-py2.py3-none-any.whl (5.5 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下组织支持

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