我有一个正常运行的django应用程序。我希望能够利用该模型从另一个(独立)python应用程序访问数据库。这就是我所拥有的(这不起作用。)
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框架内工作。我错过了什么?
答案 0 :(得分:5)
运行
django.setup()
导入模型之前
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
请参阅https://docs.djangoproject.com/en/1.9/ref/applications/#initialization-process
答案 1 :(得分: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)
将您的应用名称和项目中的任何其他应用放入&#39; INSTALLED_APPS&#39;