Django独立票据

2024-05-12 11:20:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图从另一个python脚本访问我的Django(v1.10)app DB,但这样做有些困难。

这是我的文件和文件夹结构:

store
 store
   __init.py__
   settings.py
   urls.py
   wsgi.py
 store_app
   __init.py__
   admin.py
   apps.py
   models.py
   ...
 db.sqlite3
 manage.py

other_script.py

根据Django's documentations我的other_script.py看来如下:

import django
from django.conf import settings

settings.configure(DEBUG=True)
django.setup()

from store.store_app.models import MyModel

但它会生成一个运行时错误:

RunTimeError: Model class store.store_app.models.MyModel doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

我应该注意我的INSTALLED_APPS列表包含store_app作为它的最后一个元素。

如果我尝试传递这样的配置:

import django
from django.conf import settings
from store.store_app.apps import StoreAppConfig

settings.configure(StoreAppConfig, DEBUG=True)
django.setup()

from store.store_app.models import MyModel

我得到:

AttributeError: type object 'StoreAppConfig has no attribute  'LOGGING_CONFIG'.

如果我编辑settings.py并添加LOGGING_CONFIG=None,则会得到另一个缺少属性的错误,依此类推。

如有任何建议,将不胜感激。


Tags: appsdjangostorefrompyimportappsettings
3条回答

试试这个

import sys, os, django
sys.path.append("/path/to/store") #here store is root folder(means parent).
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "store.settings")
django.setup()

from store_app.models import MyModel

这个脚本可以在系统中的任何地方使用。

我发现django-extensions包最有用。你可以找到它here

在安装并将其添加到已安装的应用程序之后,您只需要创建一个名为scripts的目录,创建一个文件并通过python manage.py runscript file_name运行它

只要记住文件必须有一个入口点。入口点是一个名为run的方法,它必须存在,并且在终端中运行python manage.py runscript file_name后将运行

这听起来像是Django Management commands.的一个很好的用例,它有额外的好处,您可以从cron、命令行直接运行它,或者从django内部调用它。这使脚本可以完全访问与主项目相同的设置和环境变量。

如果你把它移到一个合适的目录中-以这里的store为例,而不是建议,它应该可以工作。

store 
    management 
    __init__.py
        commands
        __init__.py 
        otherscript.py 

相关问题 更多 >