我有两个名为 Post
和 Reply
的表。用户只能为每个Post
创建一个Response
。模型如下所示:
class Post(models.Model):
name = models.CharField(max_length = 100)
class Reply(models.Model):
post = models.ForeignKey(Post, related_name = 'replies')
现在,我有一个返回帖子的 View ,如下所示:
class PostList(generics.ListAPIView):
permission_classes = (permissions.IsAuthenticated,)
queryset = Post.objects.all()
serializer_class = PostSerializer
以及帖子的序列化器:
class PostSerializer(serializers.ModelSerializer):
class Meta:
fields = ('id', 'name')
此 View 的结果如下所示:
[
{
"id": "1",
"name": "The first post"
},
{
"id": "2",
"name": "The second post"
}
]
现在,针对实际问题:我希望结果中有一个 bool 字段,如果用户已回复帖子,则该字段为 true
,而 false
如果他们没有。基本上,当前用户已回复第一个帖子但未回复第二个帖子的情况的结果如下所示:
[
{
"id": "1",
"name": "The first post",
"replied": "true"
},
{
"id": "2",
"name": "The second post",
"replied": "false"
}
]
我该如何实现这一目标?我有一种预感,这应该以某种方式在序列化器中实现,但我不知道如何做到这一点。
预先感谢您的所有帮助!
最佳答案
您可以将自定义字段添加到您的PostSerializer
class PostSerializer(serializers.ModelSerializer):
replied = serializers.SerializerMethodField('has_replies')
def has_replies(post):
return post.replies.filter(owner=self.context["request"].user).exists()
class Meta:
fields = ('id', 'name', 'replied')
关于python - 如果另一个表中存在一行,则添加 bool 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30640723/