getmany返回值 gjson_序列化多个模型并在一个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 = Tweet

class ArticleSerializer(serializers.ModelSerializer):

class Meta:

model = Article

class TimelineSerializer(serializers.Serializer):

tweets = TweetSerializer(many=True)

articles = ArticleSerializer(many=True)

然后,因为我们使用的模型不止一个,所以最简单的是定义自己的自定义视图集,而不是尝试将其塞入DRF的神奇ModelViewSet类型中。

http://www.django-rest-framework.org/api-

guide/viewsets/#example

首先,我们需要一个对象类型传递给我们的TimelineSerializer。它应该具有两个属性:tweets和articles

from collections import namedtuple

Timeline = 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)

2020-07-27

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值