简体   繁体   English

Django:如何使用 Modelviewset 进行 rest api 注释

[英]Django : how to make rest api comment with Modelviewset

I tried to use Django's Modelviewset to implement the comment function, but there was a problem.我尝试使用Django的Modelviewset来实现评论功能,但是出现了问题。

model :模型 :

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)

serializers :序列化程序:

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

view :看法 :

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

url :网址:

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

All I wanted was to get the comments from that one post, but all the comments are coming.我想要的只是从那篇文章中获得评论,但所有评论都来了。

How can I get a specific comment from a specific post?如何从特定帖子中获取特定评论?

You're getting all of the comments cause you initialized queryset to return all of the commnents.你让所有的评论,因为你初始化queryset返回所有commnents的。 For getting comments of one specific post you must change the queryset .要获得某个特定帖子的评论,您必须更改queryset To do that you must override get_queryset method (cause you need to get post_id argument from request):为此,您必须覆盖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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM