如何解决循环进口问题

问题描述 投票:1回答:1

我有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'的关系,该模型未安装或是抽象的。

知道如何用循环导入解决问题吗?任何提示将不胜感激!

django django-models
1个回答
2
投票

很可能,你忘了将包含AIOutput模型的应用程序添加到INSTALLED_APPS。如果不是这种情况,在INSTALLED_APPS上移动另一个应用程序高于此应用程序应该可以解决问题。另外,当两个相关的东西是不同应用程序的一部分时,通常会发生循环导入,这可能表明设计可能会得到改进,以便相关组件保留在同一个应用程序中。话虽如此,情况并非总是如此。

© www.soinside.com 2019 - 2024. All rights reserved.