Невозможно загрузить модель 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'

Как правильно загрузить модель Snippet из проекта Django, чтобы она использовала ту же базу данных, которая используется в моем проекте Django?

Я только что выяснил это, конечно же, сразу после того, как наконец-то опубликовал вопрос! Я устанавливал корневой каталог 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)

Теперь это работает!

Строка, ответственная за ошибку, - from django.snippets.models import Snippet .

Который должен быть таким, как показано ниже.

from ..django.snippets.models import Snippet

Вы должны использовать относительные пути для импорта скриптов внутри вашего проекта.

Вернуться на верх