2010-01-15 93 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