如果您合理地设计响应格式,那么在Django REST framework中您会发现事情变得更容易。
目前似乎有点模糊,但我建议如下:
{ "tweets": [ {"tweet_attr_A": value_1, ...}, // first tweet {"tweet_attr_A": value_2, ...}, // second tweet //etc ], "articles": [ {"id": 1, ...}, // first article {"id": 2, ...}, // second article //etc ]}
我们可以用三个序列化器来表达这一点,例如:
class TweetSerializer(serializers.ModelSerializer): class meta: model = Tweetclass ArticleSerializer(serializers.ModelSerializer): class meta: model = Articleclass TimelineSerializer(serializers.Serializer): tweets = TweetSerializer(many=True) articles = ArticleSerializer(many=True)
http://www.django-rest-framework.org/api-guide/serializers/#dealing-with-
nested-objects
然后,因为我们使用的模型不止一个,所以最简单的是定义自己的自定义视图集,而不是尝试将其塞入DRF神奇的ModelViewSet类型中。
http://www.django-rest-framework.org/api-
guide/viewsets/#example
首先,我们需要一个对象类型传递给我们的TimelineSerializer。它应该具有两个属性:
tweets和
articles
from collections import namedtupleTimeline = namedtuple('Timeline', ('tweets', 'articles'))
然后,我们将定义自定义视图集以获取推文和文章,实例化一个Timeline对象并返回TimelineSerializer数据:
class TimelineViewSet(viewsets.ViewSet): """ A simple ViewSet for listing the Tweets and Articles in your Timeline. """ def list(self, request): timeline = Timeline( tweets=Tweet.objects.all(), articles=Article.objects.all(), ) serializer = TimelineSerializer(timeline) return Response(serializer.data)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)