python - 如果另一个表中存在一行,则添加 bool 字段?

标签 python django django-rest-framework django-1.7

我有两个名为 PostReply 的表。用户只能为每个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/

相关文章:

Django 动态选择字段,约会槽

类实例与局部(numpy)变量的 Python 性能

django - 如何在Django模板中使用域获取_absolute_url?

python - Django Rest Framework - 添加 JOIN 端点

python - 使用 values() 从 Django DateTimeField 获取年份

django - 使用 Django Rest Framework 3.2.2 与现有对象的可写嵌套序列化器

python - 在两个用户之间共享临时数据的正确方法

python - 是否有 sympy 默认文件,例如 matplotlib 有 ~/matplotlib/.matplotlibrc ?

python - 永久指定模型的使用

python - 根据时间戳合并目录中的 csv 文件