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

问题描述 投票:0回答:2

我在编写一个 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 项目中使用的相同数据库?

python django django-rest-framework
2个回答
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)

现在可以了!


0
投票

造成错误的行是

from django.snippets.models import Snippet 

应该如下所示。

from ..django.snippets.models import Snippet

© www.soinside.com 2019 - 2024. All rights reserved.