我想提供两种不同的序列化器,但能够从以下所有设施中受益ModelViewSet:
__unicode __目标模型显示每个其他关系;例:
{
"url": "http://127.0.0.1:8000/database/gruppi/2/",
"nome": "universitari",
"descrizione": "unitn!",
"creatore": "emilio",
"accesso": "CHI",
"membri": [
"emilio",
"michele",
"luisa",
"ivan",
"saverio"
]
}
Run Code Online (Sandbox Code Playgroud)
HyperlinkedModelSerializer例:
{
"url": "http://127.0.0.1:8000/database/gruppi/2/",
"nome": "universitari",
"descrizione": "unitn!",
"creatore": "http://127.0.0.1:8000/database/utenti/3/",
"accesso": "CHI",
"membri": [
"http://127.0.0.1:8000/database/utenti/3/",
"http://127.0.0.1:8000/database/utenti/4/",
"http://127.0.0.1:8000/database/utenti/5/",
"http://127.0.0.1:8000/database/utenti/6/",
"http://127.0.0.1:8000/database/utenti/7/"
]
}
Run Code Online (Sandbox Code Playgroud)
我设法按照以下方式完成所有这些工作:
serializers.py
# serializer to use when showing a list
class ListaGruppi(serializers.HyperlinkedModelSerializer):
membri = serializers.RelatedField(many = True)
creatore = serializers.RelatedField(many = False)
class Meta:
model = models.Gruppi
# serializer …Run Code Online (Sandbox Code Playgroud) 根据blogpost 设计实用RESTful API的最佳实践中的建议,我想在fields基于Django Rest Framework的API中添加一个查询参数,使用户只能为每个资源选择一个字段子集.
串行:
class IdentitySerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = models.Identity
fields = ('id', 'url', 'type', 'data')
Run Code Online (Sandbox Code Playgroud)
常规查询将返回所有字段.
GET /identities/
[
{
"id": 1,
"url": "http://localhost:8000/api/identities/1/",
"type": 5,
"data": "John Doe"
},
...
]
Run Code Online (Sandbox Code Playgroud)
带fields参数的查询应该只返回字段的子集:
GET /identities/?fields=id,data
[
{
"id": 1,
"data": "John Doe"
},
...
]
Run Code Online (Sandbox Code Playgroud)
包含无效字段的查询应忽略无效字段或抛出客户端错误.
这有可能开箱即用吗?如果没有,实现这个的最简单方法是什么?是否有第三方包已经这样做了吗?