我很苦恼这个问题,希望您能帮我解决。
我有一个Django项目,其中包含许多子应用程序,如下所示:
my_project/
manage.py
my_project/
settings.py
urls.py
wsgi.py
app_root/
__init__.py
app1/
__init__.py
models.py
views.py
urls.py
templates/
[various templates].html
app2/
__init__.py
models.py
[etc]
app3/
[etc]
在我的Django的settings.py文件中,我安装了如下所示的应用程序:
app_root.app1,
app_root.app2,
在PyCharm中,我尝试了很多方法,但基本上将Content Root设置为顶级的“my_project /”,将app_root、app1、app2等设置为Source Roots。我尝试只将
app_root
作为唯一的Source Root,也尝试仅将app1
、app2
等设置为Source Roots, 但是没有任何影响。虽然一切正常运行,应用程序也可以正常运行,但是PyCharm无法解析我的应用程序。
但是,如果我尝试这样做:
import app_root
...
def some_function(self):
app_root.app1.models.My_Model.objects.all()
这将强调使用错误"在 '__init__.py'中找不到引用 'app1'"
,这也意味着在进行app_root. app1.
时无法在路径的任何位置完成自动完成 - 尽管每个目录都有一个(空)__init__.py
文件,但它对模型、视图等一无所知。
我也不能使用任何重构,因为它总是说“函数不在源根下”
我花费了无数个小时尝试使PyCharm行为正常,但简单地找不到方法。是否有任何方法可以做到这一点,以便PyCharm可以自动完成我的应用程序而不会继续发出检查警告?
app_root
和所有应用程序标识为“源根”,并选择了“将源根添加到PYTHONPATH”。我没有立即看到任何其他方法可以将app_root
添加到我的Python解释器中(它似乎只允许在Python解释器设置下进行包安装)。 - IMFletcherapp_root
定义为源文件夹,还不确定这是否是解决方案。 - Blackeagle52