我有两个APP:collection
和accounts
,两者都定义了模型。我将模型ReporterProfile
从accounts
导入到collection
。类似地,我将模型Report
从collection
导入到accounts
。collection
中的Report
模型在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
和User
模型从accounts
导入到collection
模型,如下所示:
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时,我得到错误:
File "F:\project_name\accounts\models.py", line 8, in <module>
from collection.models import Report
File "F:\project_name\collection\models.py", line 2, in <module>
from accounts.models import ReporterProfile, User
ImportError: cannot import name 'ReporterProfile' from partially initialized module 'accounts.models' (most likely due to a circular import) (F:\project_name\accounts\models.py)
我认为错误是由于导入模式错误造成的。我该怎么办?
7条答案
按热度按时间ovfsdjhp1#
对于
ForeignKey
:您可以使用
reporterprofile = models.ForeignKey("accounts.ReporterProfile", ...)
代替reporterprofile = models.ForeignKey(ReporterProfile, ...)
,这样就不必导入模型。防止循环导入错误:
而不是使用:
您可以用途:
von4xj4u2#
确保你写的是create models nane,因为我遇到了同样的问题,当我看一下我的导入时,我写的是userFormdata而不是userformData(我大写了'f')
ss2ws0br3#
像下面这样导入模型
同样地
f3temu5u4#
确保正确命名目录和文件名(不与django在启动过程中导入的其他模块或文件的名称冲突). I目录的名称
app
和一个文件random.py
. Django在启动时会查找类似的东西,而不是获取实际的模块,如果最终在我创建的这个文件上。因此出现了错误或循环导入异常。lfapxunr5#
这是因为django是按步骤(顺序)处理代码的。对于循环导入,一个导入引用了另一个尚未示例化或安装的导入,因此会引发循环导入错误。简单的解决方法是根据django INSTALLED_APPS中应用程序的定义顺序,将导入代码放在需要它的类下面
这个
简单回答:
第一行代码需要在accounts.models文件中进行处理,然后才能用于collections.models文件,因此导致了错误
再一次,避免使用Python内置的类或函数名称,如在django中创建应用程序的集合,因为这可能会导致严重的技术问题
zlhcx6iw6#
你应该检查导入功能.某处他们彼此崩溃.我有同样的问题.之后,我检查了导入功能,然后删除导入功能.之后,它工作正常.我只是与你分享我所面临的,并通过使用这种方式解决.
55ooxyrt7#
同样的问题也影响了我,在做了一些研究之后,我决定最好在我打算使用它的类中导入模型,而不是在顶部。
类似的东西