首页 > 解决方案 > Django ImportError:无法从部分初始化的模块“accounts.models”导入名称“ReporterProfile”(很可能是由于循环导入)

问题描述

我有两个名为collection,的应用程序accounts。这两个应用程序都定义了模型。我正在将模型ReporterProfileaccountsapp 导入到collection. 同样,Report从应用程序collectionaccounts.

app 中的Report模型collection在 app 中的模型类方法中调用,accounts如下所示:

from collection.models import Report

class ReporterProfile(models.Model):
    ....

    def published_articles_number(self):
        num = Report.objects.filter(reporterprofile=self.id).count()
        return num

同样,我正在从应用程序导入模型到ReporterProfile应用程序模型,如下所示:Useraccountscollection

from accounts.models import ReporterProfile, User
from <project_name> import settings

class Report(models.Model):
    reporterprofile = models.ForeignKey(ReporterProfile, on_delete=models.CASCADE, verbose_name="Report Author")
    ...

class Comment(models.Model):
    report = models.ForeignKey(Report, on_delete=models.CASCADE, related_name='comments')
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name="Comment by")
    ...

运行服务器或 makemigrations 时,出现错误:

文件“F:\project_name\accounts\models.py”,第 8 行,从 collection.models 导入报告

文件“F:\project_name\collection\models.py”,第 2 行,从 accounts.models 导入 ReporterProfile,用户

ImportError:无法从部分初始化的模块“accounts.models”导入名称“ReporterProfile”(很可能是由于循环导入)(F:\project_name\accounts\models.py)

我认为错误是由于错误的导入模式而出现的。我应该怎么办?

标签: pythondjangodjango-models

解决方案


对于ForeignKey

代替 using reporterprofile = models.ForeignKey(ReporterProfile, ...),您可以使用reporterprofile = models.ForeignKey("accounts.ReporterProfile", ...),因此您不必导入模型。

为了防止循环导入错误:

而不是使用:

from accounts.models import ReporterProfile
[...]
foo = ReporterProfile()

您可以使用:

import accounts.models
[...]
foo = accounts.models.ReporterProfile()

推荐阅读