PyCharm无法使用Django项目应用解析__init__.py中的引用

时间:2014-04-12 16:41:16

标签: django pycharm

我最终会遇到这个问题,并希望得到一些帮助来解决这个问题。

我有一个包含大量子应用程序的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作为唯一的源根,并且我尝试仅将app1app2等仅作为源根,但没有任何内容差。

一切都运转良好。应用程序运行和一切。但是,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会自动完成我的应用程序,而不是继续发出检查警告?

2 个答案:

答案 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_rootapp_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正在掩盖它。