python - Django 得到一个父母列表,每个父母都有自己的孩子
问题描述
我有一对父/子关系模型,例如:
class Post(models.Model):
title = models.TextField(null=True)
content = models.TextField(null=True)
author = models.TextField(null=True)
created_time = models.DateTimeField(null=True)
class Comment(models.Model):
content = models.TextField(null=True)
created_time = models.DateTimeField(null=True)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
序列化器就像:
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = '__all__'
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = Comment
fields = '__all__'
最后意见:
class PostView(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
class CommentView(viewsets.ModelViewSet):
queryset = Comment.objects.all()
serializer_class = CommentSerializer
现在我想创建一个返回Post
s 列表的 API,其中每个Post
将包含两个附加字段,一个是all_comments
,另一个是latest_comment
。我知道这可以使用JOIN
s 在 SQL 中轻松完成。我是 Django 的新手。我想知道在 Django 中是否有任何简单的方法可以做到这一点。谢谢。
解决方案
希望这个配置对你有用:)
class CommentPostSerializer(serializers.ModelSerializer): # New Serializer class
class Meta:
model = Comment
exclude = ('post',)
class PostSerializer(serializers.ModelSerializer):
all_comments = CommentPostSerializer(read_only=True, many=True, source='comment_set')
latest_comment = serializers.SerializerMethodField()
def get_latest_comment(self, post):
latest_comment = post.comment_set.last()
return CommentPostSerializer(latest_comment).data
class Meta:
model = Post
fields = '__all__'
推荐阅读
- javascript - 示例默认 WebGL 颜色缓冲区
- python - Pandas 时间序列:按天聚合并转置
- html - 希望制作一个 HTML 表单,其中包含连接到列表的编辑字段
- jquery - 多个锚链接菜单活动锚类
- javascript - javascript上的过渡
- firebase - 如何获取已上传到 Firebase 存储的第一个孩子?
- python - 如何使用 NamedTuple 子类作为从 Deque 继承的泛型类的项类型
- java - 将 Principal 绑定到 MyCustomUser 类作为控制器中的方法参数
- flutter - Flutter 键盘 gif 支持
- azure-aks - 使用 Azure 磁盘的 AKS 动态持久卷声明