正如blogpost关于设计实用的RESTful API的最佳实践中所推荐的,我想在基于Django Rest框架的API中添加一个fields
查询参数,该参数允许用户仅选择每个资源的字段子集。
序列化程序:
class IdentitySerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = models.Identity
fields = ('id', 'url', 'type', 'data')
常规查询将返回所有字段。
获取/identities/
[
{
"id": 1,
"url": "http://localhost:8000/api/identities/1/",
"type": 5,
"data": "John Doe"
},
...
]
具有fields
参数的查询应仅返回字段的子集:
获取/identities/?fields=id,data
[
{
"id": 1,
"data": "John Doe"
},
...
]
包含无效字段的查询应忽略无效字段或引发客户端错误。
这是不是可能的?如果没有,实现这一点最简单的方法是什么?是否有一个第三方包已经做到这一点?
您可以重写序列化程序__init__
方法,并根据查询参数动态设置fields
属性。您可以在整个上下文中访问request
对象,并将其传递给序列化程序。
下面是一个来自Django Rest框架文档示例的copy&paste:
from rest_framework import serializers
class DynamicFieldsModelSerializer(serializers.ModelSerializer):
"""
A ModelSerializer that takes an additional `fields` argument that
controls which fields should be displayed.
"""
def __init__(self, *args, **kwargs):
# Instantiate the superclass normally
super(DynamicFieldsModelSerializer, self).__init__(*args, **kwargs)
fields = self.context['request'].query_params.get('fields')
if fields:
fields = fields.split(',')
# Drop any fields that are not specified in the `fields` argument.
allowed = set(fields)
existing = set(self.fields.keys())
for field_name in existing - allowed:
self.fields.pop(field_name)
class UserSerializer(DynamicFieldsModelSerializer, serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url', 'username', 'email')
问题内容: 我想向fields基于Django Rest Framework的API 添加查询参数,该参数使用户只能为每个资源选择字段的子集。 例 序列化器: 常规查询将返回所有字段。 具有参数的查询应仅返回字段的子集: 具有无效字段的查询应忽略无效字段或引发客户端错误。 目标 这是否可能开箱即用?如果没有,最简单的实现方法是什么?周围是否有第三方包装? 问题答案: 你可以覆盖序列化方法,并根据查
当我要求一个图像http://127.0.0.1:8000/api/images/1/或者传入参数进行裁剪http://127.0.0.1:8000/api/images/1/?height=320 我得到的答复是: 而在http://127.0.0.1:8000/api/images/ 答复是: 为什么缩略图不容易返回主机名,我如何将基本网址追加到响应中? 以下是我的看法。派克
任何人都可以帮助我查询mongo以释放数组,我使用的是mongdb本机驱动程序我的收集文档如下,也请忽略我的objectId它只是示例 而我的预期产出是 我只想解开我的数组,在一个查询中的爱好描述之间添加一个逗号,谢谢你的帮助
我在Spring MVC(4.1.1)中使用了Thymeleaf(Tymeleaf-Spring4-2.1.3),并有一个模型/命令对象,如下所示: Thymeleaf如何确定必须生成隐藏字段? 即使我将属性更改为 这里相同:没有隐藏字段。
我不得不承认,随着iOS8的发布,我对iOS中的动态和静态框架有点困惑。 我正在寻找一种方法来分发我创建的库,我需要支持iOS7和更高版本。(注意:这将是一个专有的框架。我不能使用可可荚,我也不能分发源代码)。下面是我已经知道的: iOS 8为iOS引入了“嵌入式框架”,但据我所知,它们不适用于iOS 7,仅适用于iOS 8及以上版本。 我可以选择将我的库作为静态库(.a文件)分发,还可以分发头。
我遇到了这样的错误: 回溯: 文件“/usr/local/lib/python2.7/dist packages/django/core/handlers/exception.py”,位于内部41。响应=获取响应(请求) 文件“/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py”,位于_-get_-response