我正在使用 Django-rest 框架创建JSON-API 。我可以按照 JSON-API 文档指定的相同方式构造返回的 JSON 对象,但“包含”属性除外。有没有办法包含相关模型的多个序列化对象?
例如
如果我有两个模型类
# Snippet Model
from django.db import models
class Snippet(models.Model):
created = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=100, blank=True, default='')
user = models.ForeignKey('auth.User', related_name='snippets')
# Comment Model
from django.db import models
class Comment(models.Model):
created = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=100, blank=True, default='')
user = models.ForeignKey('auth.User', related_name='comments')
我有这两个模型的序列化器:
from rest_framework import serializers
class SnippetSerializer(serializers.ModelSerializer):
model = Snippet
fields = ('id','created', 'title')
from rest_framework import serializers
class CommentSerializer(serializers.ModelSerializer):
model = Comment
fields = ('id','created', 'title')
我有用户序列化器
# User serializer
from .serializers import SnippetSerializer
from .serializers import CommentSerializer
class UserSerializer(serializers.ModelSerializer):
included = serializers.SerilizerMethodField()
class Meta:
model = User
fields = ('id','included')
def get_included(self, obj):
included_objs = []
request = self.context['request']
# check if requested url has a query parameter "included"
query = request.QUERY_PARAMS['included'] if 'included' in request.QUERY_PARAMS else None
if query:
queries = query.split(',')
if 'included' in queries:
snippets = SnippetSerializer(many=True, read_only=True).data
comments = CommentSerializer(many=True, read_only=True).data
included_objs.append(snippets)
included_objs.append(comments)
return included_objs
这些代码并没有给我我需要的东西。
目标是,如果请求的 url 包含查询“包含”,则 API 将返回一个 JSON 对象,其中包含与“包含”属性下的用户对象相关的 CommentSerialized 和 SnippetSerialized 对象。结果应该是这样的。
{
"id" : 1,
"included": [
{'id': 2,'created': "20150729", "title":'snippet' },
{'id': 2,'created': "20150730", "title":"comment" },
{'id': 3,'created': "20150731", "title":"comment" },
]
}
如果有人可以在这里帮助我,那就太好了。谢谢!