2009-09-16 44 views
4

我的第二個不太熟練的問題是:我有一個包含4個已安裝應用程序的django項目。當我運行manage.py syndb時,它只爲它們中的兩個創建表。據我所知,我的任何模型文件都沒有問題,所有應用程序都在我的設置文件中的INSTALLED_APPS中指定。 Manage.py syndb似乎忽略了我的兩個應用程序。manage.py syncdb不會爲某些模型添加表

這兩個「被忽略」應用程序的獨特之處在於模型文件從另外兩個應用程序導入模型並將它們用作外鍵(不知道這是好還是壞的做法,但可以幫助我保持有組織)。我認爲這不是問題,因爲我評論說外鍵模型和表格還沒有創建。我很難過。

更新:當我註釋掉從其他應用程序導入模型文件的行時,syndb創建我的表。也許我並不瞭解有關獨立應用中的模型文件如何與其他應用程序相關的內容。我雖然可以通過簡單地導入將其他應用中的模型用作外鍵。不對?

+1

如果您針對相關應用程序運行manage.py sqlall [appname],是否會得到任何輸出? – 2009-09-16 21:20:54

+0

好問題 - 不,我沒有得到任何輸出。但是,如果我更改應用程序文件夾的名稱並運行syncd,則會收到錯誤消息,指出無法找到已更改的應用程序。 – twneale 2009-09-16 21:22:17

回答

6

不幸的是,manage.py默默無法加載其models.py(ticket #10706)中存在導入錯誤的應用程序。機會之一是你的models.py文件中有一個輸入錯誤...仔細檢查所有輸入語句(或使用pylint)。

最近syncdb stoped加載了我的幾個應用程序,sqlall給了我錯誤「無法找到標籤foo的應用程序」。不知道這有時意味着「找到了帶有標籤foo的應用程序,但由於引發了ImportError而無法加載」,因此我花了半個小時才意識到我試圖在其中一個導入「haslib」而不是「hashlib」我的models.py文件。

+0

這應該是,並且被認爲是Django中的一個錯誤:http://code.djangoproject.com/ticket/10706 – 2009-09-17 04:42:11

+2

哈 - 我有同樣的問題再次,谷歌搜索它,並找到了相同的答案。 – twneale 2010-05-17 15:36:08

8

我想我跑過類似的東西。

我有一個模型沒有被重置的問題。 在這種情況下,事實證明我的模型中有一個錯誤沒有被吐出。

雖然我認爲syncdb在運行時會吐出某種錯誤。

在任何情況下,嘗試從shell導入模型文件,看看你是否可以。

$ manage.py shell 
>>> from myapp import models 
>>> 

如果在文件中出現錯誤,應該指出。

根據您的更新,這聽起來像您可能有交叉導入問題。 相反的:

from app1.models import X 

class ModelA(models.Model): 
    fk = models.ForeignKey(X) 

嘗試:

class ModelA(models.Model): 
    fk = models.ForeignKey("app1.X") 

...但我認爲你應該在執行syncdb得到一個錯誤。

相關問題