Django REST Framework中TypeError: 'module'对象不可调用错误求助
问题修复方案
核心错误原因
错误TypeError: 'module' object is not callable的本质是:视图中指定的serializer_class指向的是序列化器模块,而非模块内的StorySerializer类,DRF尝试将模块作为可调用对象实例化时触发了错误。
具体修复步骤
1. 修正视图中的序列化器导入语句
打开Views.py,检查并修改序列化器的导入方式:
如果当前导入是错误的模块导入:
from . import StorySerializer # 错误:导入的是整个模块文件
需要改为精准导入模块内的序列化器类:
from .StorySerializer import StorySerializer # 正确:导入模块内的StorySerializer类
注:如果你的序列化器文件遵循DRF常规命名为serializers.py,则导入语句应为from .serializers import StorySerializer
2. 序列化器字段优化(可选,适配完整CRUD)
当前序列化器用serializers.CharField(source='category.id')仅能实现分类ID的读取展示,但无法支持创建/更新时的关联对象反序列化。如果需要完整支持CRUD操作,建议改用PrimaryKeyRelatedField:
from .models import Category, Story from rest_framework import serializers class StorySerializer(serializers.HyperlinkedModelSerializer): category = serializers.PrimaryKeyRelatedField(queryset=Category.objects.all()) class Meta: model = Story fields = ['category', 'name', 'author', 'url', 'content']
该配置既能在返回数据时显示分类ID,也能在创建/更新接口接收分类ID完成关联。
3. 权限配置一致性调整
settings.py中全局配置了DjangoModelPermissionsOrAnonReadOnly,而视图中又单独指定IsAuthenticatedOrReadOnly,两者功能重叠,建议统一配置:
- 若保留视图的权限设置,可删除
settings.py中REST_FRAMEWORK下的DEFAULT_PERMISSION_CLASSES; - 若使用全局权限配置,可删除视图中的
permission_classes属性。
验证修复
重启Django服务后,再次访问/api/stories/即可正常返回数据。
内容的提问来源于stack exchange,提问作者Tran Quoc Ung
相关产品推荐
相关产品推荐

