执行makemigrations前遇AttributeError: django.core.serializers无ModelSerializer属性
解决
AttributeError: module 'django.core.serializers' has no attribute 'ModelSerializer' 错误 核心原因
ModelSerializer 是Django REST Framework(DRF)专属的序列化类,不属于Django原生的django.core.serializers模块。你虽已导入DRF的serializers并配置了INSTALLED_APPS,但代码大概率存在导入混淆或引用错误。
排查与解决步骤
修正Serializer导入语句
确保从DRF正确导入serializers,而非Django原生模块:# 正确写法 from rest_framework import serializers杜绝以下错误导入:
# 错误写法(会指向Django原生序列化模块) from django.core import serializers检查Serializer类继承关系
确认你的序列化类继承自DRF的ModelSerializer:class ExampleModelSerializer(serializers.ModelSerializer): class Meta: model = ExampleModel fields = '__all__'排查命名冲突
- 避免自定义文件与Django/DRF核心模块重名(比如不要把文件命名为
django.py或rest_framework.py),否则会干扰正常导入逻辑。 - 检查代码中是否存在重复导入覆盖的情况:如果先导入了DRF的
serializers,后续又导入Django原生的serializers,会覆盖之前的正确引用。
- 避免自定义文件与Django/DRF核心模块重名(比如不要把文件命名为
验证INSTALLED_APPS配置
确认rest_framework确实在settings.py的INSTALLED_APPS列表内:INSTALLED_APPS = [ # Django默认应用 'django.contrib.admin', 'django.contrib.auth', # ...其他默认应用 'rest_framework', # 你的自定义应用 'your_app_name', ]清理缓存并重试命令
Python的缓存可能导致导入异常,执行以下操作后重新运行命令:# 清理项目中的__pycache__缓存目录 find . -name "__pycache__" -type d -exec rm -rf {} + # 重新执行makemigrations python manage.py makemigrations
额外提示
若以上步骤无效,检查DRF与Django的版本兼容性——部分新版本DRF对Django版本有明确要求,版本不匹配也可能引发此类导入错误。
内容的提问来源于stack exchange,提问作者Toluwalope Coast
相关产品推荐
相关产品推荐

