2010-01-15 43 views
2

基地項目結構訪問模型 「表不存在」 錯誤

baseproject 
    baseapp 
     models.py 
      class BaseModel(models.Model) 
      ... 

其他項目結構

project 
    app 
     views.py 
     urls.py 

project.app .views.py

import os 
os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings' 
from django.conf import settings 
from baseproject.baseapp.models import BaseModel 
print BaseModel.objects.count() 

從命令行運行時出現「Table」project.baseapp_baemodel'不存在「錯誤:」python views.py「。

import os 
os.environ['DJANGO_SETTINGS_MODULE'] = 'baseproject.settings' 
from django.conf import settings 
from baseproject.baseapp.models import BaseModel 
print BaseModel.objects.count() 

將project.settings更改爲baseproject.settings後,它在命令行中起作用。

import os 
os.environ['DJANGO_SETTINGS_MODULE'] = 'baseproject.settings' 
from django.conf import settings 
from baseproject.baseapp.models import BaseModel 

def someview(request): 
    count = BaseModel.objects.count() 
    return render_to_response(...) 

但它仍然提出了「表‘project.baseapp_baemodel’不存在」錯誤時訪問在瀏覽器中打開相應的URL的看法。

上述代碼有什麼問題?

+0

請提供您正在使用的PYTHONPATH。 – 2010-01-15 03:29:11

+0

「表'project.baseapp_baemodel'不存在」's'在基礎模型中缺失。 – luc 2010-01-15 06:32:09

+0

您是否在開發環境或部署的應用程序中遇到此問題?請詳細說明您的配置 – luc 2010-01-15 06:34:07

回答

6

你正在與這裏的框架作鬥爭,如果你重新思考你的架構,你會變得更好。 Django是建立在假定項目=給定的一組INSTALLED_APPS的基礎上的,並且項目設置將這些應用程序同步到的數據庫命名爲該項目。目前還不清楚你以這種方式做了什麼問題,但無論你想要實現什麼,都可以在不嘗試從不在當前項目的INSTALLED_APPS中的應用程序導入模型的情況下實現。這永遠不會可靠地工作。

如果在兩個項目中都有應用程序,則應將其放在PYTHONPATH(或virtualenvs)中,以便兩個項目都可以訪問它,並將它放在兩個項目的INSTALLED_APPS中。如果您還需要在項目之間共享數據,則可能可以將兩個項目指向同一個數據庫(儘管您需要小心其他可能不想共享數據的衝突應用程序名稱)。或者你可以使用Django主幹中的多數據庫支持,讓一個項目只爲其中一個應用使用另一個項目的數據庫。

我的猜測是,如果你備份了一個步驟並解釋你正在嘗試做什麼,那麼還有更好的解決方案。

+0

@Carl,謝謝你的解釋。我只知道現在在Django中支持多數據庫支持。 – jack 2010-01-16 07:21:47