栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

序列化多个模型并在一个JSON响应中发送所有Django Rest框架

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

序列化多个模型并在一个JSON响应中发送所有Django Rest框架

如果您合理地设计响应格式,则在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)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/514911.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号