在 Django 视图中访问其他项目中的模型导致“表不存在”错误

2024-05-27

基地项目结构

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(使用前将#替换为@)

在 Django 视图中访问其他项目中的模型导致“表不存在”错误 的相关文章

随机推荐