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

Django REST Framework中CustomUser详情接口请求报错排查

问题分析与解决方案

问题根源

你给CustomUserViewSet配置的IsAuthorOrReadOnly权限类是为文章(Post)这类包含author字段的模型设计的——它默认被检查的对象(obj)存在author属性。但CustomUser本身就是用户模型,根本没有author字段,所以访问单用户详情接口时,权限检查会抛出AttributeError。

默认User模型的单用户接口能正常运行,大概率是因为你给它配置的权限类不是IsAuthorOrReadOnly,所以没有触发这个错误。

解决方案

你需要给CustomUserViewSet使用适合用户模型的权限类,比如自定义一个仅允许用户自身修改信息、其他人只读的权限:

1. 定义适合用户模型的权限类

在api/permissions.py中添加:

from rest_framework import permissions

class IsOwnerOrReadOnly(permissions.BasePermission):
    """仅允许对象所有者进行修改操作,其他用户仅能查看"""
    def has_object_permission(self, request, view, obj):
        # GET、HEAD、OPTIONS 这类安全方法允许所有已认证用户访问
        if request.method in permissions.SAFE_METHODS:
            return True
        # 非安全方法(PUT/PATCH/DELETE)仅允许用户操作自己的账户
        return obj == request.user

2. 更新CustomUserViewSet的权限配置

修改CustomUserViewSet代码,替换权限类:

from rest_framework import viewsets

from users.models import CustomUser
from .serializers import CustomUserSerializer
from .permissions import IsOwnerOrReadOnly  # 换成新的权限类

class CustomUserViewSet(viewsets.ModelViewSet):
    """Viewset for Custom User Object."""
    queryset = CustomUser.objects.all()
    serializer_class = CustomUserSerializer
    permission_classes = (IsOwnerOrReadOnly,)  # 更新这里

这样配置后:

  • 所有已认证用户都能查看任意用户的详情(和你默认User接口的行为一致)
  • 只有用户自己能修改/删除自己的账户信息,符合合理的权限逻辑

如果你的需求是所有用户都能查看用户列表和详情,仅管理员能修改,也可以直接使用DRF内置的IsAuthenticatedOrReadOnly或IsAdminUser权限类,根据实际需求调整即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 22:45:05