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

使用Django REST Framework构建API时/api/v1/报500内部服务器错误

问题解决方法

这个错误是因为你用了DjangoModelPermissionsOrAnonReadOnly权限类,但对应的视图没有提供queryset属性,或者get_queryset()方法没有正确返回QuerySet实例。这个权限类需要依赖模型判断用户权限,必须满足这两个条件之一。

分情况处理:

1. 视图是ModelViewSet/GenericAPIView(关联数据库模型)

  • 直接在视图类里设置queryset属性:
    class YourView(ModelViewSet):
        queryset = YourModel.objects.all()
        serializer_class = YourSerializer
        permission_classes = [DjangoModelPermissionsOrAnonReadOnly]
    
  • 或者正确实现get_queryset()方法,确保返回QuerySet:
    def get_queryset(self):
        # 可添加过滤逻辑,必须返回QuerySet实例
        return YourModel.objects.filter(status='active')
    

2. 视图是普通APIView(无数据库模型关联)

这种场景下DjangoModelPermissionsOrAnonReadOnly不适用,直接替换成其他权限类,比如IsAuthenticatedOrReadOnly或AllowAny:

class YourAPIView(APIView):
    permission_classes = [IsAuthenticatedOrReadOnly]
    
    def get(self, request):
        # 你的视图逻辑
        return Response(data={"message": "success"})

3. 检查全局权限配置

如果在settings.py的REST_FRAMEWORK里默认配置了DjangoModelPermissionsOrAnonReadOnly,但某个视图不需要模型权限,就在该视图上单独指定权限类覆盖全局设置:

class YourView(APIView):
    permission_classes = [AllowAny]  # 覆盖全局配置
    # ...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:37:01