Python 将django模型导入另一个应用程序

Python 将django模型导入另一个应用程序,python,django,database,Python,Django,Database,我的django网站功能非常强大,它与数据库和web客户机通信。我的文件夹设置如下: top +--- django +---my_framework +--- models.py +--- settings.py +---lib +--- scripts +---scripts_that_do_stuff_from_console +--- service_that_needs_access_to_models li

我的django网站功能非常强大,它与数据库和web客户机通信。我的文件夹设置如下:

top
+--- django
     +---my_framework
         +--- models.py
         +--- settings.py
     +---lib
+--- scripts
     +---scripts_that_do_stuff_from_console
     +--- service_that_needs_access_to_models
lib_path = os.path.abspath(os.path.join(os.path.join('..', 'django'),"lib"))
sys.path.append(lib_path)
我可以通过脚本文件夹中的不同脚本访问lib文件夹中的库,如下所示:

top
+--- django
     +---my_framework
         +--- models.py
         +--- settings.py
     +---lib
+--- scripts
     +---scripts_that_do_stuff_from_console
     +--- service_that_needs_access_to_models
lib_path = os.path.abspath(os.path.join(os.path.join('..', 'django'),"lib"))
sys.path.append(lib_path)
这看起来不太雅致,但很管用

我需要另一个在后台运行的应用程序,它与数据库对话,支持django框架并与控制台交互。 我想访问my models.py中的一些模型,因此我尝试了以下方法:

lib_path = os.path.abspath(os.path.join(os.path.join('..', 'django'),"lib"))
sys.path.append(lib_path)
from models import SystemConfiguration
我得到这个错误:

Traceback (most recent call last):
  File "./imageHandler.py", line 14, in <module>
    from models import SystemConfiguration
  File "/home/jordan/django/my_framework/models.py", line 2, in <module>
    from django.contrib.auth.hashers import make_password
  File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/__init__.py", line 7, in <module>
    from django.middleware.csrf import rotate_token
  File "/usr/local/lib/python2.7/dist-packages/django/middleware/csrf.py", line 14, in <module>
    from django.utils.cache import patch_vary_headers
  File "/usr/local/lib/python2.7/dist-packages/django/utils/cache.py", line 26, in <module>
    from django.core.cache import caches
  File "/usr/local/lib/python2.7/dist-packages/django/core/cache/__init__.py", line 34, in <module>
    if DEFAULT_CACHE_ALIAS not in settings.CACHES:
  File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 48, in __getattr__
    self._setup(name)
  File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 42, in _setup
    % (desc, ENVIRONMENT_VARIABLE))
django.core.exceptions.ImproperlyConfigured: Requested setting CACHES, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
django.core.exceptions.ImproperlyConfigured: Unable to detect the app label for model "MyClass." Ensure that its module, "models", is located inside an installed app.
这没什么帮助。我在这方面已经研究了一段时间,但没有取得任何进展。欢迎提出任何建议


去更好的地方。。。。我补充了这一点(正如塞姆普里尼所建议的):

现在我得到了这个错误:

Traceback (most recent call last):
  File "./imageHandler.py", line 14, in <module>
    from models import SystemConfiguration
  File "/home/jordan/django/my_framework/models.py", line 2, in <module>
    from django.contrib.auth.hashers import make_password
  File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/__init__.py", line 7, in <module>
    from django.middleware.csrf import rotate_token
  File "/usr/local/lib/python2.7/dist-packages/django/middleware/csrf.py", line 14, in <module>
    from django.utils.cache import patch_vary_headers
  File "/usr/local/lib/python2.7/dist-packages/django/utils/cache.py", line 26, in <module>
    from django.core.cache import caches
  File "/usr/local/lib/python2.7/dist-packages/django/core/cache/__init__.py", line 34, in <module>
    if DEFAULT_CACHE_ALIAS not in settings.CACHES:
  File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 48, in __getattr__
    self._setup(name)
  File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 42, in _setup
    % (desc, ENVIRONMENT_VARIABLE))
django.core.exceptions.ImproperlyConfigured: Requested setting CACHES, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
django.core.exceptions.ImproperlyConfigured: Unable to detect the app label for model "MyClass." Ensure that its module, "models", is located inside an installed app.

MyClass位于models.py文件中,因此它现在正在正确打开它,但还有其他错误…

需要在开始时将设置模块添加到os.environ dict(可能在导入任何模型之前,但在执行sys.path.append之后)

os.environ['DJANGO\u SETTINGS\u MODULE']=“SETTINGS”

文件夹布局:

Wibble Project>
   manage.py
   wibble>
      settings.py   #must contain 'stuff' as an app
   stuff>
      models.py
   test.py
示例test.py:

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'wibble.settings'
from stuff.models import MyObject
print(MyObject.objects.all())
输出:

python test.py

[,]

找个更好的地方。。。。我添加了以下内容:>`lib_path=os.path.abspath(“/mnt/garageMonitor/django/lib”)sys.path.append(lib_path)lib_path=os.path.abspath(“/mnt/garageMonitor/django/garageMonitor”)sys.path.append(lib_path)os.environo['django_设置_MODULE']='settings'from models import SystemConfiguration>现在我收到以下错误:django.core.exceptions.impropertlyconfigured:无法检测模型“MyClass”的应用程序标签。请确保其模块“models”位于已安装的应用程序中。MyClass位于models.py文件中