无法在数据库脚本中从单独目录加载Django模型
我在写一个Python脚本时遇到了困难,这个脚本的功能是把一个文件夹里的.txt文件加载到我在Django项目中使用的数据库里。根据要求,这个Python脚本需要放在一个和API(我的Django目录)不同的文件夹里。
这是我目前的项目结构:
Main-Project/
database/
text-script.py
text-files/
example-file.txt
django/
django/
settings.py
snippets/
models.py
我的text-script.py文件长这样:
import os
import sys
import django
current_dir = os.path.dirname(os.path.abspath(__file__))
parent_dir = os.path.dirname(current_dir)
sys.path.append(parent_dir)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django.django.settings')
django.setup()
from django.snippets.models import Snippet
def import_articles(directory):
for filename in os.listdir(directory):
if filename.endwith('.txt'):
with open(os.path.join(directory, filename), 'r') as file:
content = file.read()
Snippet.objects.create(filename=filename, content=content)
if __name__ == '__main__':
text_dir = os.path.join(current_dir, 'text-files')
import_articles(text_dir)
我安装的应用程序看起来是这样的:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'snippets.apps.SnippetsConfig',
]
当我尝试运行这个脚本时,出现了这个错误:
ModuleNotFoundError: No module named 'snippets'
我该如何正确地从我的Django项目中加载Snippet模型,以便使用与我的Django项目相同的数据库呢?
2 个回答
0
出错的那行代码是 from django.snippets.models import Snippet
。
正确的写法应该是下面这样。
from ..django.snippets.models import Snippet
在你的项目中导入脚本时,应该使用相对路径。
0
我刚刚搞明白了,当然是在我发完问题之后才明白的!我把我的django根目录设置错了。其实我应该把它设置成这个
current_dir = os.path.dirname(os.path.abspath(__file__))
parent_dir = os.path.dirname(current_dir)
root_dir = os.path.join(parent_dir, 'api')
sys.path.append(root_dir)
现在可以正常工作了!