无法在数据库脚本中从单独目录加载Django模型

-1 投票
2 回答
20 浏览
提问于 2025-04-14 16:15

我在写一个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)

现在可以正常工作了!

撰写回答