基地项目结构
baseproject
baseapp
models.py
class BaseModel(models.Model)
...
其他项目结构:
project
app
views.py
urls.py
项目.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()
从命令行运行时,它引发“表'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'不存在”错误。
上面的代码有什么问题?
你正在与这里的框架作斗争,如果你重新思考你的架构,你会变得更好。 Django 是围绕这样的假设构建的:项目 = 一组给定的 INSTALLED_APPS,并且项目设置命名了这些应用程序同步到的数据库。这里不清楚以这种方式做事会遇到什么问题,但无论您想要实现什么目标,都可以实现,而无需尝试从当前项目的 INSTALLED_APPS 中不存在的应用程序导入模型。那永远不会可靠地工作。
如果您想要在两个项目中都有一个应用程序,则应该将其放在 PYTHONPATH (或 virtualenvs 中)中,以便两个项目都可以访问它,并将其放在两个项目的 INSTALLED_APPS 中。如果您还需要在项目之间共享其数据,则可以将两个项目指向同一个数据库(尽管您需要小心您可能不想共享数据的其他冲突的应用程序名称)。或者,您可以使用 Django trunk 中现在的多数据库支持,让一个项目仅将另一个项目的数据库用于该一个应用程序。
我的猜测是,如果您退后一步并解释您想要做什么,甚至还有比这些更好的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)