如何基于Django API实现单篇博客下所有评论的查询?
实现指定博客文章下的评论列表功能
1. 修改视图类(views.py)
改用ListAPIView更适配列表查询场景,并重写get_queryset方法实现按文章ID过滤评论:
from rest_framework import generics from rest_framework.permissions import IsAuthenticated from .models import CommentModel from .serializers import CommentListSerializer class CommentListView(generics.ListAPIView): permission_classes = [IsAuthenticated] serializer_class = CommentListSerializer def get_queryset(self): # 从URL路径参数中提取目标文章ID post_id = self.kwargs.get('post_id') # 过滤该文章下的评论,按创建时间倒序排列 return CommentModel.objects.filter(post_id=post_id).order_by('-created_at')
2. 配置URL路由(urls.py)
添加带文章ID参数的路由,让前端可以通过路径指定要查询的文章:
from django.urls import path from .views import CommentListView urlpatterns = [ # 其他现有路由... path('comments/<int:post_id>/', CommentListView.as_view(), name='post-comments'), ]
3. 可选优化:序列化器(Serializers.py)
默认返回的user和post是ID,若需要更友好的展示信息(如用户名、文章标题),可以修改序列化器:
from rest_framework import serializers from .models import CommentModel class CommentListSerializer(serializers.ModelSerializer): # 显示用户名而非用户ID user = serializers.StringRelatedField() # 显示文章标题而非文章ID post = serializers.StringRelatedField() class Meta: model = CommentModel fields = ['id', 'comment', 'post', 'user', 'created_at']
使用说明
- 前端请求示例:发送
GET /comments/1/即可获取ID为1的博客文章下的所有评论 - 权限保持
IsAuthenticated,确保仅登录用户能访问评论列表 - 评论按创建时间倒序返回,最新评论排在最前
内容的提问来源于stack exchange,提问作者Jerin Raju
相关产品推荐
相关产品推荐

