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

如何在Django Rest Framework中获取当前用户与指定用户的文章记录?

解决方案

步骤1:新增视图处理逻辑

在views.py中添加一个专门的视图类,用来获取当前请求用户与目标用户的所有文章:

from rest_framework import generics
from rest_framework.exceptions import NotFound
from django.contrib.auth import get_user_model
from .models import Article
from .serializers import ArticleSerializer

class UserAndCurrentUserArticles(generics.ListAPIView):
    serializer_class = ArticleSerializer
    # 如果需要登录才能访问,添加权限控制
    # permission_classes = [IsAuthenticated]

    def get_queryset(self):
        # 从URL参数获取目标用户的ID或用户名
        user_param = self.kwargs.get('user_param')
        User = get_user_model()

        # 尝试通过ID查找用户,失败则尝试用户名
        try:
            target_user = User.objects.get(id=user_param)
        except User.DoesNotExist:
            try:
                target_user = User.objects.get(username=user_param)
            except User.DoesNotExist:
                raise NotFound("目标用户不存在")

        # 筛选当前用户和目标用户的所有文章,按发布时间倒序
        return Article.objects.filter(
            author__in=[self.request.user, target_user]
        ).order_by('-publish')

步骤2:配置URL路由

在项目的urls.py中添加对应路由,允许传递用户参数:

from django.urls import path
from .views import UserAndCurrentUserArticles

urlpatterns = [
    # 保留你已有的其他路由
    path('articles/combined/<str:user_param>/', UserAndCurrentUserArticles.as_view(), name='combined_articles'),
]

这里的<str:user_param>既可以匹配用户ID(数字字符串),也可以匹配用户名,视图内部做了两种查询逻辑的兼容。

步骤3:前端调用逻辑

点击用户名时,将该用户的ID或用户名拼接到上述路由中发起GET请求即可。例如目标用户ID为2,请求地址为/articles/combined/2/;如果用用户名,地址则为/articles/combined/john_doe/。

可选优化

  • 若只需返回已发布的文章,可在查询集里添加status=True过滤:
return Article.objects.filter(
    author__in=[self.request.user, target_user],
    status=True
).order_by('-publish')

内容的提问来源于stack exchange,提问作者Mehdi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:10:13