如何解决循环进口

时间:2018-08-30 16:02:31

标签: django django-models

我有2个模型ai_output定义了AIOutputmanual_overwriteManualOverwrite,它们都相互导入,因此出现以下错误:

  

从main.models.manual_overwrite导入ManualOverwrite

     

ImportError:无法导入名称ManualOverwrite

我可以通过django文档找到的唯一解决方案是通过删除其中一个文件中的类的导入并用包含类名的字符串替换它来解决该问题

如此:

aioutput = models.ForeignKey(AIOutput, null=True, blank=True)

成为这个:

aioutput = models.ForeignKey('ai_output.AIOutput', null=True, blank=True)

但现在我明白了:

  

main.ManualOverwrite.aioutput:(fields.E300)字段定义一个关系   型号“ ai_output.AIOutput”(未安装或已安装)   抽象。

有人知道如何通过循环进口解决问题吗?任何提示将不胜感激!

1 个答案:

答案 0 :(得分:2)

很可能您忘记将包含AIOutput模型的应用添加到INSTALLED_APPS。如果不是这种情况,请在INSTALLED_APPS中将另一个应用移到该应用之上。顺便说一句,当两个相关的事物属于不同应用程序时,经常会发生循环导入,这很可能表明设计可能会得到改进,以使相关组件保留在同一应用程序中。话虽如此,并非总是如此。