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

Django REST Framework DefaultRouter报错排查求助

解决Django REST Framework运行报错:TypeError: 'list' object is not callable

我来帮你一步步排查问题根源,先把两个关键问题拆解清楚:

1. 先确认views.py的修正(你已经做了,但再明确下)

你一开始在SubsystemViewSet里错误地把serializer_class赋值为SubsystemSerializer(queryset)——这是典型的用法错误,serializer_class只需要指定序列化器类本身,不需要传入实例。你后来改成serializer_class = SubsystemSerializer是完全正确的,这个问题已经解决了。

2. 核心报错原因:urls.py里的路由注册方式错误

你在urls.py里写了router.registry(r'subsystems', SubsystemViewSet),这里的registry是DefaultRouter的属性,它本质是一个用来存储已注册路由的列表,不是可调用的方法,所以把它当方法调用就会抛出'list' object is not callable的错误。

正确的做法是使用DRF路由提供的router.register()方法来注册视图集,这是标准用法。

修正后的完整代码

修正后的urls.py

from django.contrib import admin
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from subsystem.api.views import SubsystemViewSet, MenuViewSet  # 按需添加Menu视图集

router = DefaultRouter()
# 用register方法注册视图集,参数依次为路由前缀、视图集类
router.register(r'subsystems', SubsystemViewSet)
router.register(r'menus', MenuViewSet)  # 可选:如果需要暴露Menu的API就加上

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include(router.urls)),  # Django3.1+推荐用path代替旧的url方法
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

确认后的views.py

from rest_framework.viewsets import ModelViewSet
from subsystem.models import Subsystem, Menu
from subsystem.api.serializers import SubsystemSerializer, MenuSerializer

class SubsystemViewSet(ModelViewSet):
    queryset = Subsystem.objects.all()
    serializer_class = SubsystemSerializer  # 正确写法:直接指定序列化器类

class MenuViewSet(ModelViewSet):
    queryset = Menu.objects.all()
    serializer_class = MenuSerializer

测试验证

修正后重新运行python manage.py runserver,访问http://localhost:8000/api/subsystems/,应该就能正常看到Subsystem的列表数据了。如果注册了Menu的视图集,访问http://localhost:8000/api/menus/也能正常获取数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:25:27