无法解决“ ValueError:尝试相对顶级包进行相对导入”

时间:2019-07-02 09:58:06

标签: python django python-3.x

我正在运行项目并显示此错误。我用谷歌搜索并尝试了一些解决方案,但似乎没有用。

File "/home/bs-094/Dev/backend/busgroup-backend/src/bus_portal_backend/apps/inquiry/forms/inquiry_details.py", line 2, in <module>
    from ..models.inquiry import Inquiry
ValueError: attempted relative import beyond top-level package

我的文件夹结构是

busgroup-backend
 src
  bus_portal_backend
   apps
    inquiry
      models
       _init_.py
       inquiry.py
      forms
       inquiry_details.py

任何人都可以帮助我解决问题,那将是非常有用的帮助。我是django的新手。谢谢

编辑这是解决我的问题的方法,我必须以这种方式导入

from bus_portal_backend.apps.inquiry.models import Inquiry

此外,我正在运行调试器。我的脚本路径为busgroup-backend/src/manage.py,将其更改为/home/bs-094/Dev/backend/busgroup-backend/src/manage.py,这使我成功运行了项目。

2 个答案:

答案 0 :(得分:1)

forms似乎不包含__init__.py文件,因此Python认为它不是一个包。因此,尝试从..models进行导入就是尝试将其提升到当前包的根目录之上(因为...busgroup-backend/src/bus_portal_backend/apps/inquiry/forms/inquiry_details.py实际上是一个独立的模块)。

相对导入仅在包中起作用。因此,您还应该通过创建forms来制作models的{​​{1}}和inquiry子包。

答案 1 :(得分:1)

如果您导入from ..models.inquiry import Inquiry,则..是指

busgroup-backend
 src
  bus_portal_backend
   apps

没有__init__.py,因此不被python视为软件包。