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

Django运行makemigrations报错无法导入模型(大概率为循环导入问题)

问题原因

你遇到的是典型的Django跨应用模型循环导入报错:user应用的模型文件顶部导入了polls应用的PollQuestion模型,同时polls应用的模型文件顶部又导入了user应用的UserProfile模型,Python加载模块时需要双方都完成初始化才能继续,陷入了死锁。

解决方案

你只需要调整导入的位置即可,不需要修改现有逻辑:

  1. 删除user/models.py文件顶部的from polls.models import PollQuestion导入语句
  2. 将PollQuestion的导入移动到get_all_polls方法内部,修改后的代码如下:
class UserProfile(models.Model):
    user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)

    def get_all_polls(self):
        # 把导入移到方法内部,仅方法调用时才会执行导入,此时模块已完成初始化
        from polls.models import PollQuestion
        all_polls = PollQuestion.objects.all().count()
        return 10
补充优化方案(可选)

针对模型关联场景的循环导入,Django本身支持用字符串格式的模型路径引用关联对象,不需要直接导入模型。比如你可以把PollQuestion里的外键定义修改为如下格式,就可以删掉polls/models.py顶部的from user.models import UserProfile导入语句,从根源避免循环导入:

user = models.ForeignKey("user.UserProfile", null=True, on_delete=models.CASCADE)

修改完成后重新执行python manage.py makemigrations即可正常生成迁移文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:39:00