gpt4 book ai didi

python - 在 Django View 中访问其他项目中的模型导致 "table doesn' t 存在“错误

转载 作者:行者123 更新时间:2023-11-28 21:30:36 26 4
gpt4 key购买 nike

基础项目结构

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()

从命令行运行时引发“表‘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(...)

但在浏览器中打开相应的url访问 View 时,仍然出现“Table 'project.baseapp_baemodel'不存在”的错误。

上面的代码有什么问题?

最佳答案

你在这里与框架作斗争,如果你重新考虑你的架构,你会过得更好。 Django 是基于这样的假设构建的:一个项目 = 一组给定的 INSTALLED_APPS,并且项目设置命名一个数据库,这些应用程序将同步到该数据库。此处并不清楚以这种方式做事会遇到什么问题,但无论您想要实现什么,都可以在不尝试从不在当前项目的 INSTALLED_APPS 中的应用程序导入模型的情况下实现。这永远不会可靠地工作。

如果两个项目中都有您想要的应用程序,您应该将其放在 PYTHONPATH(或 virtualenvs)中以便两个项目都可以访问它,并将其放在两个项目的 INSTALLED_APPS 中。如果您还需要在项目之间共享其数据,您可以将两个项目指向同一个数据库(尽管您需要注意其他您可能不想共享数据的冲突应用程序名称)。或者,您可以使用 Django 主干中现在的多数据库支持,让一个项目仅将另一个项目的数据库用于该应用程序。

我的猜测是,如果您备份一个步骤并解释您正在尝试做什么,那么还有比这些更好的解决方案。

关于python - 在 Django View 中访问其他项目中的模型导致 "table doesn' t 存在“错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2069254/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com