首页 > 解决方案 > Django:如何使用 Modelviewset 进行 rest api 注释

问题描述

我尝试使用Django的Modelviewset来实现评论功能,但是出现了问题。

模型 :

class Comment(models.Model):
    created = models.DateTimeField(auto_now_add= True)
    content = models.CharField(max_length = 255, null = True)
    author = models.ForeignKey(User, on_delete= models.CASCADE, null = True)
    writer =  models.CharField(max_length = 255, null = True)

    class Meta:
        abstract = True
        ordering = ['-id']

class TalkComment(Comment):
    title = "talk"
    post = models.ForeignKey(Talk, on_delete= models.CASCADE, null = True)

序列化器:

class TalkCommentSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.TalkComment
        fields = '__all__'

看法 :

class TalkCommentViewset(viewsets.ModelViewSet):
    queryset = models.TalkComment.objects.all()
    serializer_class = serializers.TalkCommentSerializer

网址:

router.register(r'talk/(?P<id>\d+)/comment', postview.TalkCommentViewset)
/api/talk/2/comment/

我只想从那篇文章中获得评论,但所有评论都来了。

如何从特定帖子中获得特定评论?

标签: djangodjango-rest-framework

解决方案


你得到所有的评论,因为你初始化queryset返回所有的评论。要获得一篇特定帖子的评论,您必须更改queryset. 为此,您必须覆盖get_queryset方法(因为您需要post_id从请求中获取参数):

class TalkCommentViewset(viewsets.ModelViewSet):
    serializer_class = serializers.TalkCommentSerializer

    def get_queryset(self):
        post_id = self.kwargs["id"]
        queryset = TalkComment.objects.filter(post__id=post_id)
        return queryset

推荐阅读