2015-12-15 55 views
3

我有一個工作正常的Django應用程序。我希望能夠利用該模型從另一個(獨立的)python應用程序訪問數據庫。這裏是我有什麼(不工作)。在Django框架之外使用django模型

import sys 
import os 

sys.path.append(os.path.abspath("/home/pi/garageMonitor/django/garageMonitor")) 
os.environ['DJANGO_SETTINGS_MODULE'] = 'garageMonitor.settings' 
import models 
    config = models.SystemConfiguration.objects.filter(idSystemConfiguration=1) 
    config = config[0] 
    for x in config.__dict__: 
     print x 

以下是錯誤我得到:

File "/home/pi/garageMonitor/django/lib/webWatcher.py", line 14, in <module> 
    import models 
    File "/home/pi/garageMonitor/django/garageMonitor/models.py", line 11, in <module> 
    class DoorClosing(models.Model): 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 131, in __new__ 
    'app.' % (new_class.__name__, model_module.__name__) 
django.core.exceptions.ImproperlyConfigured: Unable to detect the app label for model "DoorClosing 

DoorClosing是在我的models.py文件中的類。類似的代碼在django框架內工作。我錯過了什麼?你的模型

import django 
import sys 
import os 

sys.path.append(os.path.abspath("/home/pi/garageMonitor/django/garageMonitor")) 
os.environ['DJANGO_SETTINGS_MODULE'] = 'garageMonitor.settings' 
django.setup() 
import models 
    config = models.SystemConfiguration.objects.filter(idSystemConfiguration=1) 
    config = config[0] 
    for x in config.__dict__: 
     print x 

+0

https://docs.djangoproject.com/en /1.9/ref/models/options/#app-label也許在你的模型'meta'中添加'app_label'? –

+0

爲什麼你想從外面訪問模型?爲了測試目的? – DhiaTN

+0

您正在使用哪個Django版本? – knbk

回答

2

請參考這個職位在最新版本的Django這個問題的工作版本。 看到https://stackoverflow.com/a/46050808/1698030

這裏引述的解決方案:

import os 
from django.conf import settings 
from django.apps import apps 

conf = { 
    'INSTALLED_APPS': [ 
     'Demo' 
    ], 
    'DATABASES': { 
     'default': { 
      'ENGINE': 'django.db.backends.sqlite3', 
      'NAME': os.path.join('.', 'db.sqlite3'), 
     } 
    } 
} 

settings.configure(**conf) 
apps.populate(settings.INSTALLED_APPS) 

把你的應用程序名稱和任何其他應用程序,你對下的「INSTALLED_APPS」項目