django rest framework 嵌套序列化

模型:作者和新闻

class Author(models.Model):
    """作者信息"""
    GENDER_CHOICES = (
        (0, "女"),
        (1, "男")
    )
    name = models.CharField(verbose_name="姓名", max_length=20)
    nick_name = models.CharField(verbose_name="昵称", max_length=20)
    mobile = models.CharField(verbose_name="手机号", max_length=11)
    email = models.EmailField(verbose_name="邮箱")
    gender = models.SmallIntegerField(verbose_name="性别", choices=GENDER_CHOICES, default=0)
    profile_picture = RichTextUploadingField(verbose_name="头像")

    class Meta:
        db_table = "tbl_author"
        verbose_name = "公众号作者"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name


class CompanyNews(models.Model):
    """公司新闻"""
    author = models.ForeignKey(to=Author, on_delete=models.CASCADE, related_name="company_news", verbose_name="作者")
    title = models.CharField(verbose_name="标题", max_length=50)
    digest = models.CharField(verbose_name="摘要", max_length=200)
    publish_time = models.DateTimeField(verbose_name="发布时间", auto_now=True)
    content = RichTextUploadingField(verbose_name="新闻内容")
    picture = RichTextUploadingField(verbose_name="封面图片")
    create_time = models.DateTimeField(verbose_name="创建时间", auto_now_add=True)
    update_time = models.DateTimeField(verbose_name="创建时间", auto_now=True)

    class Meta:
        db_table = "tbl_company_news"
        verbose_name = "公司动态"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.title

 序列化器

class AuthorSerializer(serializers.ModelSerializer):
    """作者序列化器"""

    class Meta:
        model = Author
        fields = "__all__"


class CompanyNewsSerializer(serializers.ModelSerializer):
    """公司动态序列化器"""
    author = serializers.SerializerMethodField()

    def get_author(self, obj):
        author_set = Author.objects.filter(id=obj.author_id)
        if author_set:
            return AuthorSerializer(instance=author_set.first()).data["nick_name"]
        else:
            return ""

    class Meta:
        model = CompanyNews
        fields = ("id", "title", "digest", "publish_time", "content", "picture", "create_time", "update_time", "author")

 查询视图

class CompanyNewsView(APIView):
    """公司动态"""

    def get(self, request):
        company_news_set = CompanyNews.objects.all().order_by("-create_time")[:9]
        company_news_data = CompanyNewsSerializer(instance=company_news_set, many=True).data
        return Response(data=company_news_data)

 响应数据

[
    {
        "id": 1,
        "title": "今天发工资了",
        "digest": "每个人都发了",
        "publish_time": "2021-01-14T11:02:21.679927+08:00",
        "content": "<p>朋友们发工资了</p>",
        "picture": "haha.jpg"
        "create_time": "2021-01-15T16:56:11.521337+08:00",
        "update_time": "2021-01-15T16:56:11.582421+08:00",
        "author": "张三"
    }
]

参考资料

 django rest framework 嵌套序列化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值