在Django视图中访问其他项目中的模型导致“表不存在”错误 [英] Access models in other project in a Django view cause "table doesn't exist" error

查看:205
本文介绍了在Django视图中访问其他项目中的模型导致“表不存在”错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

基础项目结构

  baseproject 
baseapp
models.py
class BaseModel(models.Model)
...

其他项目结构

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

它从命令行运行时引发Tableproject.baseapp_baemodel不存在错误:python views.py。

  import os 
os.environ ['DJANGO_SETTINGS_MODULE'] ='baseproject.settings'
from django.conf import settings
from baseproject.baseapp.mo dels 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(...)

但它仍然提出Table在浏览器中打开相应的url访问视图时,project.baseapp_baemodel不存在错误。



上面的代码有什么问题?

解决方案

您正在与这里的框架进行对抗,如果您重新思考您的架构,您将会更好。 Django建立在一个项目=一组给定的INSTALLED_APPS的假设下,项目设置命名为这些应用程序同步的数据库。这里不清楚,只要以这种方式做事情就会遇到什么问题,但是无论您想要实现什么,都可以实现,而不用尝试从不在当前项目的INSTALLED_APPS中的应用程序导入模型。如果在这两个项目中都有一个应用程序,你应该把它放在你的PYTHONPATH(或在virtualenvs中),这样两个项目都可以访问并将其放在两个项目的INSTALLED_APPS中。如果您还需要在项目之间共享数据,您可能可以将这两个项目指向同一个数据库(尽管您需要注意其他可能不希望共享数据的冲突应用程序名称)。或者您可以使用现在在Django trunk中的多数据库支持让一个项目仅使用另一个项目的数据库。



我的猜测是,如果你备份一步,解释你想做什么,还有比这些更好的解决方案。


Base project structure

baseproject
    baseapp
        models.py
            class BaseModel(models.Model)
            ...

Other project structure:

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

it raised "Table 'project.baseapp_baemodel' doesn't exist" error when run from command line: "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()

After changed project.settings to baseproject.settings, it works in command line.

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

But it still raised "Table 'project.baseapp_baemodel' doesn't exist" error when access the view by opening corresponding url in browser.

What's wrong in above code?

解决方案

You are fighting against the framework here, and you'll be better off if you rethink your architecture. Django is built around the assumption that a project = a given set of INSTALLED_APPS, and the project settings name a database to which those apps are synced. It's not clear here what problem you have with just doing things that way, but whatever you're trying to achieve, it can be achieved without trying to import models from an app that is not in your current project's INSTALLED_APPS. That is never going to work reliably.

If there's an app you want in both projects, you should put it on your PYTHONPATH (or in virtualenvs) so both projects can access it, and put it in the INSTALLED_APPS of both projects. If you also need its data shared between the projects, you might be able to point both projects at the same database (though you'd need to be careful of other conflicting app names that you might not want to share data). Or you could use the multi-database support that's now in Django trunk to have the one project use the other project's database only for that one app.

My guess is if you back up a step and explain what you're trying to do, there are even better solutions available than those.

这篇关于在Django视图中访问其他项目中的模型导致“表不存在”错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆