jac*_*ack 2 python django model
基础项目结构
baseproject
baseapp
models.py
class BaseModel(models.Model)
...
Run Code Online (Sandbox Code Playgroud)
其他项目结构:
project
app
views.py
urls.py
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
从命令行运行时,它引发了"表'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()
Run Code Online (Sandbox Code Playgroud)
将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(...)
Run Code Online (Sandbox Code Playgroud)
但是当通过在浏览器中打开相应的URL来访问视图时,它仍然会引发"表'project.baseapp_baemodel'不存在"错误.
上面的代码有什么问题?
你在这里反对这个框架,如果你重新考虑你的架构,你会更好.Django是基于一个项目=一组给定的INSTALLED_APPS,项目设置命名这些应用程序同步到的数据库的假设而构建的.目前还不清楚你只是按照这样的方式做了什么问题,但无论你想要实现什么,都可以实现,而不是试图从当前项目的INSTALLED_APPS中的应用程序导入模型.这永远不会可靠地运作.
如果在两个项目中都有一个你想要的应用程序,你应该把它放在PYTHONPATH(或virtualenvs)中,这样两个项目都可以访问它,并将它放在两个项目的INSTALLED_APPS中.如果您还需要在项目之间共享其数据,则可以将两个项目指向同一个数据库(尽管您需要注意其他可能不想共享数据的冲突应用程序名称).或者您可以使用现在在Django主干中的多数据库支持,让一个项目仅为该应用程序使用另一个项目的数据库.
我的猜测是,如果你支持一个步骤并解释你想要做什么,那么有更好的解决方案.
| 归档时间: |
|
| 查看次数: |
2909 次 |
| 最近记录: |