模型:作者和新闻
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": "张三" } ]
参考资料