2016-12-21 17 views
1

我見過很多關於如何在項目外使用Django模型的答案。但我沒有任何成功。我試圖執行this的答案,但我得到一個錯誤。我在我的應用程序中創建了一個新的「script.py」文件。從一個新的腳本訪問Django模型

script.py

from django.conf import settings 
settings.configure(
    DATABASE_ENGINE = 'sqlite3', 
    DATABASE_NAME = '/home/shivam/study/Python/automation/project/db.sqlite3', 
    DATABASE_USER = '', 
    DATABASE_PASSWORD = '', 
    DATABASE_HOST = '', 
    DATABASE_PORT = '', 
    TIME_ZONE = 'America/New_York', 
) 
from models import * 

當我運行該腳本,我得到一個錯誤。

Traceback (most recent call last): 
    File "script.py", line 11, in <module> 
    from models import * 
    File "/home/shivam/study/Python/automation/project/videos/models.py", line 11, in <module> 
    class video(models.Model): 
    File "/home/shivam/study/Python/automation/env/local/lib/python2.7/site-packages/django/db/models/base.py", line 105, in __new__ 
    app_config = apps.get_containing_app_config(module) 
    File "/home/shivam/study/Python/automation/env/local/lib/python2.7/site-packages/django/apps/registry.py", line 237, in get_containing_app_config 
    self.check_apps_ready() 
    File "/home/shivam/study/Python/automation/env/local/lib/python2.7/site-packages/django/apps/registry.py", line 124, in check_apps_ready 
    raise AppRegistryNotReady("Apps aren't loaded yet.") 
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet. 

有人可以幫助我嗎?

+1

爲什麼不做管理命令? – RemcoGerlich

回答

8

您需要的是可導入的設置。

import os 
import django 
os.environ["DJANGO_SETTINGS_MODULE"] = 'project.settings' 
django.setup() 
from .models import 

另一種方式通過Django的外殼打電話給你的腳本:

python manage.py shell < script.py 
+1

最後,有些東西:) –

+0

https://gist.github.com/mtt2p/2dd1a80e45958452379b83c59f63883d – mtt2p

+0

這個解決方案沒有爲我工作,並給出了這個錯誤:'django.core.exceptions.AppRegistryNotReady:應用程序尚未加載。' –

1

作爲例外說沒有應用程序安裝,你還沒有模型。

from django.conf import settings 
settings.configure(
    DATABASE_ENGINE = 'sqlite3', 
    DATABASE_NAME = '/home/shivam/study/Python/automation/project/db.sqlite3', 
    # .... 
    INSTALLED_APPS=["myapp","myotherapp"] 

) 
from myapp.models import * 
+0

來自videos.models的文件「script.py」,第12行,在 import * ImportError:沒有名爲videos.models的模塊 其中「videos」是應用程序的名稱。 –

+0

你的'PYTHONPATH'中的應用程序?我假設'script.py'在'videos'文件夾之外。 – yorodm

+0

我在視頻之外保留了script.py,但現在我得到了原始錯誤。 –

0

從位於目錄中的腳本,你manage.py位於下面的解決方案工作:

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) 

用您的應用名稱替換Demo,併爲您的應用輸入正確的數據庫配置。這個解決方案在Django 1.9上爲我工作。