2014-04-12 55 views
2

我對這個問題非常滿意,希望能幫助解決這個問題。PyCharm無法使用Django項目應用程序解決__init__.py中的引用

我有一幫子應用程序作爲這樣一個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等作爲源Roots。我試過只有app_root作爲唯一的源代碼根目錄,並且我嘗試過只有app1,app2等僅作爲源代碼根目錄,但沒有任何區別。

一切正常。應用程序運行和一切。但是,PyCharm無法解析我的應用程序。

不過,如果我試試這個:

import app_root 
... 
def some_function(self): 
    app_root.app1.models.My_Model.objects.all() 

它會突出APP1與錯誤「無法找到‘初始化的.py’參考‘APP1’」 這也意味着它不能做自動完成路徑中的任何地方app_root.app1. - 儘管在每個目錄中都有(空)__init__.py,但對模型,視圖等沒有任何意見。

我也不能使用任何重構,因爲它總是說「的功能是不是源根目錄下的」

我花了無數的時間試圖讓PyCharm的行爲,但根本無法找到一個方法來做到這一點。有什麼辦法可以做到這樣PyCharm將自動完成我的應用程序,而不是繼續給予檢查警告?

回答

0

我有一些類似的問題。我的解決方案在PyCharm首選項中,我在我的活動Python解釋器中添加了一個到app_root的路徑。

+0

感謝您的評論。我有'app_root'和所有標識爲「源根」的應用程序,並且還選擇了「添加源根到PYTHONPATH」。我不覺得有什麼其他的方法可以將'app_root'添加到我的Python解釋器中(它似乎只允許在Python解釋器設置下安裝包) – IMFletcher

+0

剛做了最新的PyCharm版本更新,顯然Interperter有一些變化。他們刪除了可能性,以添加一個路徑到你的interperter。 目前我只將'app_root'定義爲源文件夾,不知道這個解決方案。 – Blackeagle52

0

與PyCharm鄉親的交流後,這裏是我學到了什麼:

Django的使用__import__達到自己的目的進口INSTALLED_APPS變量,他們的模型所有的應用程序。 在你的情況下,它運行

__import__("app_root.app1") 
__import__("app_root.app1.models") 

之後,你叫import app_root並獲得模塊app_rootapp_root.app1app_root.app1.models已經通過內部的Django代碼進口

事實是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被掩蔽。

相關問題