You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 21:22:10