Django循环导入报错:无法在views与forms间导入对应模块如何解决
问题原因
你遇到的是典型的Python循环导入错误,触发流程如下:
- 系统加载
views.py时,首先会执行顶部导入逻辑,需要从同级的forms.py导入ProductForm、RawProductForm两个类,因此转向加载forms.py模块 - 加载
forms.py时,首先执行顶部导入逻辑,需要从products.views导入product_create_view函数,但此时views.py还处于未完全加载的状态,product_create_view函数还没被初始化,因此触发导入失败。
解决方案
最优方案(当前场景直接可用)
你提供的forms.py代码中没有任何地方用到product_create_view函数,这个导入属于冗余代码,直接删除forms.py顶部的from products.views import product_create_view语句即可解决问题。
备用方案(后续如果确实需要在forms中调用该视图时使用)
如果后续业务逻辑确实需要在forms.py中使用product_create_view函数,可以用以下两种方式规避循环导入:
- 延迟导入:不要在
forms.py的顶部写导入语句,改为在需要用到该函数的局部代码块(比如表单的clean方法、save方法内部)再执行导入 - 代码重构:把两个模块共同依赖的逻辑抽离到第三个独立模块(比如同级目录下新建
utils.py),两个模块都从该第三方模块导入需要的内容,避免互相直接导入的情况。
内容的提问来源于stack exchange,提问作者The Ultraempoleon
相关产品推荐
相关产品推荐

