[英]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.