我最终会遇到这个问题,并希望得到一些帮助来解决这个问题。
我有一个包含大量子应用程序的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
作为唯一的源根,并且我尝试仅将app1
,app2
等仅作为源根,但没有任何内容差。
一切都运转良好。应用程序运行和一切。但是,PyCharm无法解析我的应用程序。
但是,如果我试试这个:
import app_root
...
def some_function(self):
app_root.app1.models.My_Model.objects.all()
它会突出显示app1并显示错误"无法找到参考' app1'在' init .py'"
这也意味着它在执行app_root.app1.
时无法在路径中的任何位置自动完成 - 尽管在每个目录中都有(空)__init__.py
,但它不知道模型,视图等。 / p>
我也不能使用任何重构,因为它总是说"功能不在源根下#34;
我花了无数个小时试图让PyCharm表现出来,但根本无法找到办法。有没有办法可以这样做,所以PyCharm会自动完成我的应用程序,而不是继续发出检查警告?
答案 0 :(得分:0)
我有一些类似的问题。我的解决方案在PyCharm首选项中,我在我的活动Python解释器中添加了app_root
的路径。
答案 1 :(得分:0)
与PyCharm人交换后,我学到了以下内容:
Django出于自己的目的使用INSTALLED_APPS
导入__import__
变量及其模型中的所有应用。
在你的情况下,它运行
__import__("app_root.app1")
__import__("app_root.app1.models")
之后,您致电import app_root
并获取已app_root
和app_root.app1
已由内部Django代码导入的模块app_root.app1.models
事实上,Django导入的应用程序和模型是Django内部,它没有文档,可能会在将来的版本中更改。我们相信您不应该在生产代码中依赖它,PyCharm也不应该这样做。
以下是裸蟒(没有django)的例子:
__import__("encodings.ascii")
import encodings
print (encodings.ascii.Codec) # this code works, but PyCharm marks "ascii" as "unknown module"
所以基本上,它不应该像import app_root
一样工作,但是Django funkiness正在掩盖它。