动态返回Django REST Framework序列化器字段的子集
项目描述
此包提供了一个混合类,允许用户根据资源动态选择仅字段的子集。
官方版本支持
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
},
...
]
您可以在同一请求中同时使用 fields 和 omit!
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
致谢
实现基于此StackOverflow答案。感谢 YAtOff!
GitHub 用户 X17 和 rawbeans 在我的 gist 上提供了改进,这些改进被纳入了本库。谢谢!
有关其他贡献者,请参阅GitHub 贡献者统计。
许可证
MIT 许可证,请参阅 LICENSE 文件。
项目详情
哈希值 for drf_dynamic_fields-0.4.0-py2.py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 48b879fe899905bc18593a61bca43e3b595dc3431b3b4ee499a9fd6c9a53f98c |
|
MD5 | 1ebacf7a9021d6539c1f3201cf887d03 |
|
BLAKE2b-256 | 2d184b02bda9ae5a7ac52bfcb4f1740fb4a0aa12d220881695471b700bb3f00e |