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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:02:25